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 Array.prototype.slice使用说明
Oct 11 Javascript
事件模型在各浏览器中存在差异
Oct 20 Javascript
Express.JS使用详解
Jul 17 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
浅谈js函数的多种定义方法与区别
Nov 29 Javascript
JS正则获取HTML元素的方法
Mar 31 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
Aug 01 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 Javascript
Vue混入mixins滚动触底的方法
Nov 22 Javascript
微信小程序聊天功能的示例代码
Jan 13 Javascript
vue路由权限校验功能的实现代码
Jun 07 Javascript
详解JavaScript匿名函数和闭包
Jul 10 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
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
基于JavaScript实现单例模式
2019/10/30 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
flask-restful使用总结
2018/12/04 Python
Python中按键来获取指定的值
2019/03/02 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
个人近期表现材料
2014/02/11 职场文书
个人授权委托书范本
2014/09/14 职场文书
趵突泉导游词
2015/02/03 职场文书
公司晚会主持词
2019/04/17 职场文书
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android