vue 数组和对象不能直接赋值情况和解决方法(推荐)


Posted in Javascript onOctober 25, 2017

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

当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue

当你修改数组的长度时,例如:vm.items.length = newLength

当第一种情况需求时,可以使用this.$set(this.arr,index,newVal)

Vue 不能检测对象属性的添加或删除:

可以使用this.$set(this.person,'age',12)

     当需要添加多个对象时,Object.assign({},this.person,{age:12,name:'wee'})

PS:Vue实现对数组、对象的深拷贝、复制

当组件间传递对象时,由于此对象的引用类型指向的都是一个地址(除了基本类型跟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 
  } 
 }

总结

以上所述是小编给大家介绍的vue 数组和对象不能直接赋值情况和解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery拖拽元素改变大小尺寸实现代码
Dec 10 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 Javascript
jQuery实现获取table表格第一列值的方法
Mar 01 Javascript
详解JavaScript中数组的reduce方法
Dec 02 Javascript
BootStrap 弹出层代码
Feb 09 Javascript
Vue的百度地图插件尝试使用
Sep 06 Javascript
基于Vue过渡状态实例讲解
Sep 14 Javascript
VsCode插件整理(小结)
Sep 14 Javascript
jQuery中 DOM节点操作方法大全
Oct 12 jQuery
Vue不能观察到数组length的变化
Jun 08 Javascript
如何基于JS截获动态代码
Dec 25 Javascript
OpenLayers加载缩放控件使用方法详解
Sep 25 Javascript
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 #Javascript
javascript计算对象长度的方法
Oct 25 #Javascript
AngularJS实现的select二级联动下拉菜单功能示例
Oct 25 #Javascript
Angular4实现鼠标悬停3d倾斜效果
Oct 25 #Javascript
详解vue 组件之间使用eventbus传值
Oct 25 #Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
Oct 25 #Javascript
Windows安装Node.js报错:2503、2502的解决方法
Oct 25 #Javascript
You might like
mysql数据库差异比较的PHP代码
2012/02/05 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
php冒泡排序与快速排序实例详解
2015/12/07 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
JS与C#编码解码
2013/12/03 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
简单了解three.js 着色器材质
2020/08/03 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
Python使用turtule画五角星的方法
2015/07/09 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
使用Python实现画一个中国地图
2019/11/23 Python
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
武汉东之林科技有限公司机试
2013/09/17 面试题
制冷与电控专业应届生求职信
2013/11/11 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
优秀班组事迹材料
2014/12/24 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
农业项目投资意向书
2015/05/09 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
MySQL 数据丢失排查案例
2021/05/08 MySQL