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 相关文章推荐
含有CKEditor的表单如何提交
Jan 09 Javascript
javascript实现点击提交按钮后显示loading的方法
Jul 03 Javascript
ajax跨域调用webservice的实现代码
May 09 Javascript
深入理解Javascript中的自执行匿名函数
Jun 03 Javascript
Bootstrap CSS组件之按钮组(btn-group)
Dec 17 Javascript
JS+DIV实现的卷帘效果示例
Mar 22 Javascript
Jquery中attr与prop的区别详解
May 27 jQuery
详解Angular.js中$http拦截器的介绍及使用
Jul 04 Javascript
详解EasyUi控件中的Datagrid
Aug 23 Javascript
基于Swiper实现移动端页面图片轮播效果
Dec 28 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
Oct 23 Javascript
vue3 自定义图片放大器效果的示例代码
Jul 23 Vue.js
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无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
Python修改MP3文件的方法
2015/06/15 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
Python多继承原理与用法示例
2018/08/23 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
python通过实例讲解反射机制
2019/10/17 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
Android面试题附答案
2014/12/08 面试题
党员政治学习材料
2014/05/14 职场文书
公司备用金管理制度
2015/08/04 职场文书
防溺水主题班会教案
2015/08/12 职场文书
中秋节随笔
2015/08/15 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL