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 相关文章推荐
浅谈JavaScript字符集
May 22 Javascript
BootStrap 超链接变按钮的实现方法
Sep 25 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
Oct 05 Javascript
利用纯Vue.js构建Bootstrap组件
Nov 03 Javascript
JSON 数据详解及实例代码分析
Jan 20 Javascript
vue2.0 axios前后端数据处理实例代码
Jun 30 Javascript
基于AngularJS实现表单验证功能
Jul 28 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
Sep 01 Javascript
Vue-cli项目获取本地json文件数据的实例
Mar 07 Javascript
vue keep-alive请求数据的方法示例
May 16 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
May 15 Javascript
webpack HappyPack实战详解
Oct 08 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实现邮件群发的源码
2013/06/18 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
js判断是否是手机页面
2017/03/17 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
python 模拟登录B站的示例代码
2020/12/15 Python
scrapy-splash简单使用详解
2021/02/21 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
设计毕业生简历中的自我评价
2013/10/01 职场文书
考试退步检讨书
2014/01/15 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
大学军训的体会
2014/11/08 职场文书
总经理致辞
2015/07/29 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android
Python进程池与进程锁之语法学习
2022/04/11 Python