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 相关文章推荐
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
prototype Element学习笔记(篇二)
Oct 26 Javascript
11款基于Javascript的文件管理器
Oct 25 Javascript
jQuery 获取URL参数的插件
Mar 04 Javascript
js清空表单数据的两种方式(遍历+reset)
Jul 18 Javascript
javascript实现动态加载CSS
Jan 26 Javascript
JS 面向对象之继承---多种组合继承详解
Jul 10 Javascript
关于js原型的面试题讲解
Sep 25 Javascript
JS利用cookies设置每隔24小时弹出框
Apr 20 Javascript
给localStorage设置一个过期时间的方法分享
Nov 06 Javascript
vue项目出现页面空白的解决方案
Oct 31 Javascript
微信小程序实现文件预览
Oct 22 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
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
PHP数据过滤的方法
2013/10/30 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
jQuery 获取对象 定位子对象
2010/05/31 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python制作mysql数据迁移脚本
2019/01/01 Python
django使用admin站点上传图片的实例
2019/07/28 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
使用Python实现牛顿法求极值
2020/02/10 Python
python网络编程之五子棋游戏
2020/05/14 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
Python调用Redis的示例代码
2020/11/24 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
团结就是力量演讲稿
2014/05/21 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
倡议书的格式写法
2015/04/28 职场文书
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫