vue data对象重新赋值无效(未更改)的解决方式


Posted in Javascript onJuly 24, 2020

vue存在一个比较深的问题就是data中的属性对象如果在初始化的时候为{},那么后面在方法用普通的js语法赋值会无效

这里是data

data() {
 return {
  model: {}
 };
 }

这里是方法里的普通赋值

afterUpload(response) {
 this.model.icon = response.url;
}

普通方法会无效,需要使用vue提供的方法重新显示声明

afterUpload(response) {
 this.$set(this.model,'icon',response.url)
}

补充知识:Vue.js - 数组和对象的赋值动态变化 & 克隆

这篇文章主要介绍了 vue 数组和对象不能直接赋值动态变化 & 克隆情况和解决方法,需要的朋友可以参考下。

一、直接赋值动态变化

1.1、Vue 不能检测以下变动的数组

当你利用索引直接设置一个项时,例如

vm.items[indexOfItem] = newValue

当你修改数组的长度时,例如

vm.items.length = newLength

1.2、解决方案

当第一种情况需求时,可以使用

this.$set(this.arr,index,newVal)

this.arr = [新数组]

2.1、Vue 不能检测以下变动的对象

当你修改一个初始化时,不存在的对象里的属性时

this.obj.b = 3

Ps:在不刷新页面父子组件的情况下,二次触发就可以,因为由于第一次的触发渲染,但第一次并没有触发,只有第二次会显示。

2.2、解决方案

当修改一个初始化已存在的属性,可以直接检测到动态变化

this.obj.a = 3

上面不能检测到的另一种解决方案

this.$set(this.person,'age',12)

this.obj = { a: 3, b: 4 }

当需要添加多个对象时

Object.assign({},this.person,{age:12,name:'wee'})

二、数组、对象克隆

当组件间传递对象时,由于此对象的引用类型指向的都是一个地址(除了基本类型跟null,对象之间的赋值,只是将地址指向同一个,而不是真正意义上的拷贝),如下。

数组:

var a = [1,2,3];
var b = a;
b.push(4); // b中添加了一个4
alert(a); // a变成了[1,2,3,4]

对象:

var obj = {a:10};
var obj2 = obj;
obj2.a = 20; // obj2.a改变了
alert(obj.a); // 20,obj的a跟着改变

这就是由于对象类型直接赋值,只是将引用指向同一个地址,导致修改了 obj 会导致 obj2 也被修改。

所以在 vue 中,如果多个组件引用了同一个对象作为数据,那么当其中一个组件改动对象数据时,其他对象的数据也会同步改动。有这种双向绑定的需要的话,那么自然是最好的,但如果不需要这种绑定而希望各组件的对象数据之间相互独立,即是互不关联的对象副本的话,可以用下面的方法解决。

computed: { 
 data: function () { 
  var obj={}; 
  obj=JSON.parse(JSON.stringify(this.templateData)); //this.templateData是父组件传递的对象 
  return obj 
 } 
 }

当然日常的克隆也可以使用这句关键代码

JSON.parse(JSON.stringify(...));

以上这篇vue data对象重新赋值无效(未更改)的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJS 2.2.1的grid控件在ie6中的显示问题
May 04 Javascript
jQuery表格插件datatables用法总结
Sep 05 Javascript
JavaScript实现将xml转换成html table表格的方法
Apr 17 Javascript
javascript实现的简单计时器
Jul 19 Javascript
JS实现下拉菜单赋值到文本框的方法
Aug 18 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
May 20 Javascript
js实现登录验证码
Dec 22 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
Oct 17 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 Javascript
JS实现的点击按钮图片上下滚动效果示例
Jan 28 Javascript
Vue函数式组件的应用实例详解
Aug 30 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
Feb 05 Javascript
VUE项目axios请求头更改Content-Type操作
Jul 24 #Javascript
vue+axios全局添加请求头和参数操作
Jul 24 #Javascript
vue在响应头response中获取自定义headers操作
Jul 24 #Javascript
vuex存取值和映射函数使用说明
Jul 24 #Javascript
js实现金山打字通小游戏
Jul 24 #Javascript
vuex中store存储store.commit和store.dispatch的用法
Jul 24 #Javascript
js实现滑动滑块验证登录
Jul 24 #Javascript
You might like
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
从零学Python之引用和类属性的初步理解
2014/05/15 Python
python实现实时监控文件的方法
2016/08/26 Python
Python中模块string.py详解
2017/03/12 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
python使用folium库绘制地图点击框
2018/09/21 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
时尚圣经:The Fashion Bible
2019/03/03 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
会计顶岗实习心得
2014/01/25 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
大学军训决心书
2015/02/05 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python