位置: IT常识 - 正文

vue2中无法监听数组和对象的某些变化问题(vue为什么监听不到对象内部属性)

编辑:rootadmin
vue2中无法监听数组和对象的某些变化问题 一、数组1. 不能监听的情况

推荐整理分享vue2中无法监听数组和对象的某些变化问题(vue为什么监听不到对象内部属性),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3.0监听,vue mousedown监听失败,vue监听页面所有组件 加载完毕,vue中的监听,vue监听不到props的变化,vue监听不到props的变化,vue无法监听数组的变化,vue无法监听数组的变化,内容如对您有帮助,希望把文章链接给更多的朋友!

(1) 直接通过下标赋值  arr[i] = value

(2) 直接修改数组长度 arr.length = newLen

2. 替代做法

(1)修改值

1

2

3

Vue.set(arr, index, newvalue)

vm.$set(arr, index, newvalue)

arr.splice(index, 1, newvalue)

(2) 修改数组长度,

1

arr.splice(newLen)

3. 注意

调用数组的pop、push、shift、unshift、splice、sort、reverse等方法时是可以监听到数组的变化的

vue内部相当于重写了数组的原型,劫持了这七个方法

二、对象1. 不能监听的情况

属性的新增和删除

1

2

obj.newkey=newvalue

delete obj.key

2. 替代做法

1

2

3

4

5

vue2中无法监听数组和对象的某些变化问题(vue为什么监听不到对象内部属性)

6

7

// 新增

 Vue.set(obj, newkey, newvalue)

 vm.$set(obj, newkey, newvalue)

 obj = Object.assign({}, obj, {newkey1: newvalue1, newkey2: newvalue2})

// 删除

 Vue.delete(obj, key)

 vm.$delete(obj, key)

三、分析 vue 2 无法监听数组和对象的这些变化的原因

首先,vue2是通过Object.defineProperty(obj, key, value)这种方式监听数据的

1. 对于数组

Object.defineProperty()是可以对数组实现监听操作的,但是vue并没有实现这个功能,因为数组长度不定而且数据可能会很多,如果对每一个数据都实现监听,性能代价太大

但是注意:数组中的元素是引用类型时是会被监听的

2. 对象

Object.defineProperty()针对的是对象的某个属性,而且这个操作在vue的初始化阶段就完成了,所以新增的属性无法监听,通过set方法新增对象就相当于初始化阶段的数据响应式处理

四、vue 3响应式原理

vue 3是通过proxy直接代理整个对象来实现的,而不是像Object.defineProperty针对某个属性。

所以,只需做一层代理就可以监听同级结构下的所有属性变化,包括新增属性和删除属性

关于vue监听的一些问题对象的监听

vue通过object.defineProperty将对象的key转化成getter/setter的形式来追踪变化,但是这种追踪方式只能追踪到数据的修改,对象的属性的删除和增加,这种形式追踪不到。为此vue提供可$set 和$delete两种API来配合使用,解决监听不到属性新增删除问题。

*需要特别注意,在使用$set时,需要传递的参数有三个 vm.$set(target,key,value),target不能是Vue.js实例或者vue.js实例的根数据对象,所谓的根数据对象是指vm.$data *

*在使用$delete时候,也可以中另外一种方法实现,但是不太推荐:

1

2

 delete this.obj.name;

 this.obg._ob_.dep.notify  //手动向依赖发送变化通知;

 (说明: _ob_ 是 vue中是否是响应式的判断依据)*

 在使用$delete时候,target不能是Vue.js实例或者vue.js实例的根数据对象,

数组的监听

vue通过拦截数组原型的方式实现数组的变化的监听,所以有些不是数组原型定义的方法进行的数组操作,发生的变化,是数组感知不到的,比如通过数组下标修改对应位置的值(this.list[0] = 2),或者通过数组长度改变数组(比如通过数组length清空数组的操作: this.list.length = 0 )。

所以进行数组操作的时候,尽量使用数组原型方法操作:

1

push pop unshift shift concat reverse sort slice splice join 

本文链接地址:https://www.jiuchutong.com/zhishi/295872.html 转载请保留说明!

上一篇:html表白代码(html表白代码动态)

下一篇:将uniAPP项目导入到微信开发者工具中保姆级教程(uniapp怎么引入elementui)

  • 博客营销推广的技巧有哪些?(简述博客营销的推广和优化?)

    博客营销推广的技巧有哪些?(简述博客营销的推广和优化?)

  • 苹果admin怎么注册(苹果admin怎么注册后面的字母是)

    苹果admin怎么注册(苹果admin怎么注册后面的字母是)

  • 华为手机两张图片怎么合成一张(华为手机两张图片怎样合成一张)

    华为手机两张图片怎么合成一张(华为手机两张图片怎样合成一张)

  • 小米8青春版支持投屏吗(小米8青春版支持OTG功能吗)

    小米8青春版支持投屏吗(小米8青春版支持OTG功能吗)

  • 腾讯会议可以两台设备同时登录吗(腾讯会议可以两天用同一个会议号吗)

    腾讯会议可以两台设备同时登录吗(腾讯会议可以两天用同一个会议号吗)

  • 没有电话卡可以注册微信吗(没有电话卡可以登录微信吗)

    没有电话卡可以注册微信吗(没有电话卡可以登录微信吗)

  • word蓝色双横线什么意思(word蓝色双横线怎么永久去掉)

    word蓝色双横线什么意思(word蓝色双横线怎么永久去掉)

  • 蓝牙音频解码器改不了

    蓝牙音频解码器改不了

  • 华为碎屏险怎么买(华为碎屏险怎么退)

    华为碎屏险怎么买(华为碎屏险怎么退)

  • 华为m6能用优盘吗(华为m6可以读取移动硬盘吗)

    华为m6能用优盘吗(华为m6可以读取移动硬盘吗)

  • 快手红心每天多少限制(快手每天点红心有限制多少不)

    快手红心每天多少限制(快手每天点红心有限制多少不)

  • 手机插上u盘如何使用(手机插上u盘如何设置密码)

    手机插上u盘如何使用(手机插上u盘如何设置密码)

  • 宽带和wifi有什么区别(宽带和wife的区别)

    宽带和wifi有什么区别(宽带和wife的区别)

  • oled与lcd哪个耐用(oled和lcd哪个结实)

    oled与lcd哪个耐用(oled和lcd哪个结实)

  • 苹果手机怎样隐藏号码打电话(苹果手机怎样隐藏微信顶部ipad已登录)

    苹果手机怎样隐藏号码打电话(苹果手机怎样隐藏微信顶部ipad已登录)

  • 旺旺号降权还能刷了吗(旺旺号降权还能恢复吗)

    旺旺号降权还能刷了吗(旺旺号降权还能恢复吗)

  • 快手土豪榜单在哪里看(快手土豪榜单在哪里看到)

    快手土豪榜单在哪里看(快手土豪榜单在哪里看到)

  • 小米蓝牙耳机mini怎么重新配对(小米蓝牙耳机迷你蓝牙耳机怎么连接手机)

    小米蓝牙耳机mini怎么重新配对(小米蓝牙耳机迷你蓝牙耳机怎么连接手机)

  • vivo的5个系列(vivo的每个系列介绍)

    vivo的5个系列(vivo的每个系列介绍)

  • 荣耀9如何退回8.0(荣耀9怎么退回8系统)

    荣耀9如何退回8.0(荣耀9怎么退回8系统)

  • 情人节海报怎么设计(情人节海报怎么画简单)

    情人节海报怎么设计(情人节海报怎么画简单)

  • 【JavaWeb】重新认识 Servlet 的初始化 [ 回顾 Servlet ](重置java)

    【JavaWeb】重新认识 Servlet 的初始化 [ 回顾 Servlet ](重置java)

  • warnquota命令  发送邮件给超出配额的用户(命令start)

    warnquota命令 发送邮件给超出配额的用户(命令start)

  • 结转增值税会计凭证
  • 年底对账
  • 公司房租只有房租租赁协议无发票怎么入账
  • 银行存款出现负数算不算违规
  • 电子承兑汇票怎么做账
  • 企业年末要写财务报告吗
  • 企业购买土地如何做账
  • 房地产开发企业土地增值税清算
  • 固定资产处理怎么记账
  • 房地产企业销售未完工产品预计毛利率
  • 股票属于现金及股票吗
  • 银行结算方式包括哪些内容
  • 小规模企业怎么报国税
  • 冲暂估成本的会计分录
  • 公司发给员工的奖金要交税吗
  • 缴纳增值税的计税依据
  • 旅行社的税
  • 请问给员工报销怎么报
  • 普通发票收款方账号信息错了可以正常报销吗
  • win7更改电脑设置在哪里
  • 退付手续费核对过期没处理怎么办
  • 个人劳务费怎么计算
  • 企业所得税税负率多少合适
  • 年底返利账务处理
  • 游戏不能全屏幕
  • 间接费用是什么费用
  • 企业党建活动经费管理办法的规定
  • php红包源码
  • 鸿蒙系统值得升级嘛
  • 实收资本与注册资本之间的关系
  • 以银行存款交纳欠缴税金会计分录
  • php addslashes函数
  • 小规模纳税人超标认定一般纳税人
  • 公司支付的工伤赔偿金可以税前扣除吗
  • php一个页面多个分页
  • 万能的python
  • c语言内嵌汇编
  • 印花税减半征收减免性质代码
  • 个人以实物出资怎么做账
  • 未来的现金流折现
  • 费用化支出期末一般转入哪个账户?
  • 以前年度的应交税费贷方怎么调平
  • 修改Dede默认投票代码 防止Request Error错误
  • 融资购买固定资产账务处理
  • 限额领料单属于什么凭证
  • 创建一个空的学生基本信息表的副本
  • 小规模纳税人分红要交税吗
  • 小微企业开专票需要缴纳多少税
  • 累计折旧计提会计分录
  • 预缴所得税科目
  • 购买农产品普通发票怎么做账
  • 公司涉及研发房怎么办
  • 出售捐赠物资
  • 发票已认证次月退回
  • 会计的视频教程
  • 高铁行程信息提示可以乘车吗
  • 出口收到货款怎么做账
  • 申报和做账必须一致吗
  • 劳务报酬如何记账
  • 应交增值税怎么求
  • 实收资本怎么入账?
  • mysql分表命令
  • win10免费安装吗
  • linux中fi
  • xp系统镜像文件怎么制作
  • windows 个性化设置包含哪些方面?
  • CentOS 5.4 rsync+inotify配置触发式(实时)文件远程同步
  • 获取linuxip
  • win10系统怎么设置不锁屏和休眠
  • win8.1使用技巧大全
  • win10的用户
  • 学习雷锋好榜样
  • linux shell 循环语句
  • unity 版本控制
  • android 圆形图片
  • 基于springboot的毕设
  • js设计模型
  • 湖北省电子税务局新版登录操作简介
  • 小规模开了红字发票申报表怎么填
  • 对税务巡视工作的意见
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设