位置: 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)

  • 同一个抖音号两个手机能同时用吗(同一个抖音号两部手机一部手机再看另一部手机知道吗)

    同一个抖音号两个手机能同时用吗(同一个抖音号两部手机一部手机再看另一部手机知道吗)

  • vivo手机耳机插孔在哪(vivo手机耳机插上没有声音怎么回事)

    vivo手机耳机插孔在哪(vivo手机耳机插上没有声音怎么回事)

  • 为什么华为nova4耗电那么快(为什么华为nova4e手机壳这么少)

    为什么华为nova4耗电那么快(为什么华为nova4e手机壳这么少)

  • 小米9se触控失灵(小米9se触控失灵怎么处理)

    小米9se触控失灵(小米9se触控失灵怎么处理)

  • 直播带货需要哪些条件(直播带货需要哪些资源)

    直播带货需要哪些条件(直播带货需要哪些资源)

  • 怎么查看淘宝消费总额(怎么查看淘宝消费账单)

    怎么查看淘宝消费总额(怎么查看淘宝消费账单)

  • 拼多多助力上限怎么办(拼多多助力每天限几次)

    拼多多助力上限怎么办(拼多多助力每天限几次)

  • 电脑白屏怎么快速修复(电脑白屏怎么快速切换)

    电脑白屏怎么快速修复(电脑白屏怎么快速切换)

  • 网易云音乐切换英文(网易云音乐切换账号在哪里)

    网易云音乐切换英文(网易云音乐切换账号在哪里)

  • 华为光感应器怎么设置(华为光感器在哪设置)

    华为光感应器怎么设置(华为光感器在哪设置)

  • 屏幕脱胶一定要换屏吗(屏幕脱胶一定要拆屏幕吗)

    屏幕脱胶一定要换屏吗(屏幕脱胶一定要拆屏幕吗)

  • 6000毫安充电宝一般充几个小时(6000毫安充电宝能充多少电)

    6000毫安充电宝一般充几个小时(6000毫安充电宝能充多少电)

  • 笔记本电脑从哪下软件(笔记本电脑从哪里看配置和型号)

    笔记本电脑从哪下软件(笔记本电脑从哪里看配置和型号)

  • 苹果无线耳机三代和二代的区别(苹果无线耳机三代什么时候出的)

    苹果无线耳机三代和二代的区别(苹果无线耳机三代什么时候出的)

  • vivo曲屏手机s5怎么截屏(vivo手机曲屏的是什么型号)

    vivo曲屏手机s5怎么截屏(vivo手机曲屏的是什么型号)

  • 中央处理器由什么组成(中央处理器由什么单元组成)

    中央处理器由什么组成(中央处理器由什么单元组成)

  • vivo相机怎么调九宫格(vivo相机怎么调比例)

    vivo相机怎么调九宫格(vivo相机怎么调比例)

  • 手机摔完黑屏怎么回事(手机摔后黑屏了)

    手机摔完黑屏怎么回事(手机摔后黑屏了)

  • 手机qq怎么查找聊天记录(手机qq怎么查找删除的好友)

    手机qq怎么查找聊天记录(手机qq怎么查找删除的好友)

  • 抖音推广对方知道吗(抖音推广对方知道是谁吗)

    抖音推广对方知道吗(抖音推广对方知道是谁吗)

  • 获取设备信息权限怎么设置(获取设备信息权限在哪里设置)

    获取设备信息权限怎么设置(获取设备信息权限在哪里设置)

  • 视频动态怎么发(视频动态怎么发长视频)

    视频动态怎么发(视频动态怎么发长视频)

  • win10cortana小娜有用吗(cortana小娜可以卸载吗)

    win10cortana小娜有用吗(cortana小娜可以卸载吗)

  • 这个Python读取文件的方法,堪称天花板级别...(python2.7读取文件)

    这个Python读取文件的方法,堪称天花板级别...(python2.7读取文件)

  • 对方公司为什么一定要专票
  • 怎么添加临时办社保卡
  • 工程款税率是多少专票
  • 计提个税会计科目怎么做
  • 增值税的账务处理办法
  • 法定免税项目包括
  • 会计报表编制有哪些标准
  • 土地增值税预缴税率
  • 金税盘如何增加税率
  • 项目部电缆属于固定资产吗
  • 商贸企业变更为生产企业
  • 企业政府性征地补偿款如何合法使用
  • 房产税征税税率
  • 评估所得征税方法是一种控制纳税人逃税和避税的措施
  • 机关单位伙食
  • 加工承揽合同印花税谁交
  • 新成立的公司每天付款有要求吗
  • 增值税附加税计入什么会计科目
  • 个体工商户2020
  • 企业以货币形式取得的收入
  • 建设工程施工包括哪些工程
  • 店内上保险退保
  • 本月没有发生额本月合计
  • 旅游业开办费
  • 土地税返还的会计分录
  • 现金流量表根据什么原则编制
  • 退休职员工伤补助金放哪个科目?
  • php的运行机制与什么有关
  • 支付拍卖成交金额是多少
  • 汇兑损益和财务费用区别
  • 天猫魔合
  • 工会经费是职工工资总额的
  • 交通运输企业会议记录
  • 购买软件多大金额算违法
  • 07. vue3+vite+qiankun搭建微应用前端框架,并接入vue3微应用
  • 小规模纳税人按简易计税法计税时也可以进行税额的抵扣
  • 培训机构先收费后付费
  • 营改增分录
  • 工程发票预缴是什么意思
  • springbootredis密码加密
  • 完全卸载mysql8.0
  • mariadb10安装
  • 库存现金的主要内容有哪些
  • 以前年度损益调整怎么做账
  • 计量差错引起的原材料盘亏
  • 工会经费与工会福利的区别
  • 不含税劳务报酬7000
  • 信用卡什么情况下会降额度
  • 纳税调整收入包括哪些
  • 销售合同的印花税由谁交
  • 向客户收取的承兑贴息款如何开发票
  • 投资性房地产递延所得税其他综合收益
  • 税务稽查补缴增值税税的账务处理流程
  • 企业利润率如何计算公式
  • 公开发行企业债券,发行人累计债券余额
  • 个人如何进行股票交易
  • 企业应收票据
  • 账簿按账页格式排序
  • mysql日志记录
  • mysql删除和更新效率
  • tcp window 0
  • linux信号机制的原理
  • adb mac安装
  • linux误删除数据
  • ghost操作指南
  • win7计算机怎么设置开机密码
  • WIN10系统中软件打开找不到网络共享盘
  • 用VMware安装阿里linux
  • 关闭迅雷安卓版自动更新
  • cocos2d-x教程
  • bootstrap弹出表单
  • 将目录下的文件和文件夹按类型排序
  • python 开源ide
  • python中deque
  • 云南省税务局app缴费
  • 河南省地方税务局公告2017年第4号
  • 香港居民个人转让境内股权所得个人所得税税率
  • 一般纳税人申请流程
  • 上市公司季报有哪些内容
  • 无锡税务局稽查一分局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设