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 相关文章推荐
Array对象方法参考
Oct 03 Javascript
DHTML 中的绝对定位
Nov 26 Javascript
javascript options属性集合操作代码
Dec 28 Javascript
javascript多种数据类型表格排序代码分析
Sep 11 Javascript
网页中CDATA标记的说明
Sep 12 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
Jun 21 Javascript
JQuery中使用.each()遍历元素学习笔记
Nov 08 Javascript
纯javascript制作日历控件
Jul 17 Javascript
Bootstrap表单控件使用方法详解
Jan 11 Javascript
WebPack配置vue多页面的技巧
May 15 Javascript
js for终止循环 跳出多层循环
Oct 04 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
Apr 11 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
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
python不相等的两个字符串的 if 条件判断为True详解
2020/03/12 Python
Python 远程开关机的方法
2020/11/18 Python
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
Servlet方面面试题
2016/09/28 面试题
2016年毕业实习心得体会范文
2015/10/09 职场文书
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
Go并发4种方法简明讲解
2022/04/06 Golang