解决vue无法侦听数组及对象属性的变化问题


Posted in Javascript onJuly 17, 2020

一、数组

1、可以监听到的情况

如push、splice、=赋值(array=[1,2,3])

2、无法监听到的情况

使用下标修改某个元素(这种比较常见)

array[index] = 1

object.a = 3

直接修改数组length

array.length = 5

3、解决方案

this.$set(array, index, data) - 这是个深度的修改,某些情况下可能导致你不希望的结果,因此最好还是慎用
this.dataArr = this.originArr
this.$set(this.dataArr, 0, {data: '修改第一个元素'})
console.log(this.dataArr)    
console.log(this.originArr)    //同样的 源数组也会被修改 在某些情况下会导致你不希望的结果

上面提到的splice方法进行增删改

利用临时变量进行中转

let tempArr = [...this.targetArr]
tempArr[0] = {data: 'test'}
this.targetArr = tempArr

二、对象

对象和数组都是js里的引用类型,在实际存储中,数据是存储在堆中的,利用存储在栈里的对象名或者数组名的指针进行索引,因此也存在在浅拷贝和深拷贝以及等号赋值时,到底是仅仅新建了一个指针指向了同一份数据,还是两个指针分别指向了两份完全一样的数据的问题

1、可以监听到的

对象的直接=赋值

this.obj = {name: 'test'}

2、无法监听到的

对象属性的增删改

obj: {
  prop1: 'data1',
  prop2: 'data2'
}
...
// 增
this.obj.prop3 = 'data3'
// 删
delete this.obj.prop1
// 改
this.obj.prop1 = 'data4'

3、解决办法

this.$set(obj, key ,value) - 可实现增、改
watch时添加deep:true深度监听,只能监听到属性值的变化,新增、删除属性无法监听
this.$watch('blog', this.getCatalog, {
  deep: true
  // immediate: true // 是否第一次触发
 });
watch时直接监听某个key
watch: {
 'obj.name'(curVal, oldVal) {
  // TODO
 }
}
object.assign()+直接=赋值
this.watchObj = Object.assign({}, this.watchObj, {
 name: 'xiaoyue',
 age: 15,
});

补充知识:vue 监听不到数组或对象值的变化怎么办

一、vue监听数组的变化

vue能购监听到数组变化的场景

通过赋值的形式改变正在被监听的数组;

通过splice(index, num, val) 的形式改变正在被监听的数组;

通过数组的push的形式改变正在被监听的数组。

vue无法监听数组变化的场景

通过数组索引改变数组元素的值;

改变数组的长度;

vue无法监听数组变化的场景

this.$set(arr, index, newVal);

通过splice(index,num,val);

使用临时变量作为中转,重新赋值数组;

二、vue监听对象的变化

vue能够监听到对象变化的场景

通过直接赋值的场景。

eg:watchObj = {name:“zyk”}

vue无法监听到对象变化的场景

对象的增加、删除、修改无法被vue监听到

vue解决无法监听对象变化的方法

使用 this.$set(object, key, value)(vue 无法监听 this.set 修改原有属性)

使用Object.assign(),直接赋值的原理;(推荐使用)

以上这篇解决vue无法侦听数组及对象属性的变化问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
May 14 Javascript
jquery 与NVelocity 产生冲突的解决方法
Jun 13 Javascript
js验证输入是否为手机号码或电话号码示例
Dec 30 Javascript
JS使用getComputedStyle()方法获取CSS属性值
Apr 23 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
Aug 17 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
Jul 01 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
Feb 21 Javascript
javascript 面向对象function详解及实例代码
Feb 28 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
Jul 13 Javascript
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
Dec 06 Javascript
JS div匀速移动动画与变速移动动画代码实例
Mar 26 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 #Javascript
Vue element-ui父组件控制子组件的表单校验操作
Jul 17 #Javascript
简单了解常用的JavaScript 库
Jul 16 #Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 #jQuery
浅谈js中的attributes和Attribute的用法与区别
Jul 16 #Javascript
JS自定义右键菜单实现代码解析
Jul 16 #Javascript
JS如何在不同平台实现多语言方式
Jul 16 #Javascript
You might like
php $_SERVER当前完整url的写法
2009/11/12 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
php常见的魔术方法详解
2014/12/25 PHP
PHP开发注意事项总结
2015/02/04 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
React项目动态设置title标题的方法示例
2018/09/26 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
Python对象转JSON字符串的方法
2016/04/27 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Python IDLE入门简介
2017/12/08 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
python批量修改图片大小的方法
2018/07/24 Python
python中join()方法介绍
2018/10/11 Python
python 提取文件指定列的方法示例
2019/08/07 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
酒店总经理工作职责
2013/12/13 职场文书
交通事故委托书范本
2014/09/28 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
学校百日安全活动总结
2015/05/07 职场文书
2016入党心得体会范文
2016/01/06 职场文书
中学教代会开幕词
2016/03/04 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
golang中的struct操作
2021/11/11 Golang