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

  • 尼彩手机官网旗舰店(尼彩手机i8)(尼彩手机知乎)

    尼彩手机官网旗舰店(尼彩手机i8)(尼彩手机知乎)

  • 快手为什么看不到别人的动态呢(快手为什么看不到谁浏览我的作品)

    快手为什么看不到别人的动态呢(快手为什么看不到谁浏览我的作品)

  • 微信为啥载入数据99不动了(微信一直在载入数据50%不能使用怎么办)

    微信为啥载入数据99不动了(微信一直在载入数据50%不能使用怎么办)

  • 快手能查出真实姓名吗(快手能查出真实姓名吗怎么查)

    快手能查出真实姓名吗(快手能查出真实姓名吗怎么查)

  • 怎么打开手机App(怎么打开手机app定位权限)

    怎么打开手机App(怎么打开手机app定位权限)

  • qq怎么获得幸运字符标识(qq怎样获得幸运字符)

    qq怎么获得幸运字符标识(qq怎样获得幸运字符)

  • 荣耀9xpro隐藏功能(荣耀9x隐藏功能怎么使用)

    荣耀9xpro隐藏功能(荣耀9x隐藏功能怎么使用)

  • 抖音拉黑后还能收到对方信息吗(抖音拉黑后还能评论回复吗)

    抖音拉黑后还能收到对方信息吗(抖音拉黑后还能评论回复吗)

  • 抖音实名认证可以认证几个号(抖音实名认证可以认证两个抖音账号吗)

    抖音实名认证可以认证几个号(抖音实名认证可以认证两个抖音账号吗)

  • 三星980处理器相当于骁龙多少(三星980处理器相当于苹果a几处理器)

    三星980处理器相当于骁龙多少(三星980处理器相当于苹果a几处理器)

  • 抖音能查到电话号码吗(抖音能查到电话实名信息吗)

    抖音能查到电话号码吗(抖音能查到电话实名信息吗)

  • 摩托罗拉折叠手机什么时候上市(摩托罗拉折叠手机最新款)

    摩托罗拉折叠手机什么时候上市(摩托罗拉折叠手机最新款)

  • 卫星电话和手机的区别(卫星电话手机壳)

    卫星电话和手机的区别(卫星电话手机壳)

  • 关闭文档快捷键(关闭当前文档的快捷键是)

    关闭文档快捷键(关闭当前文档的快捷键是)

  • 华为p30pro掉水里了怎么处理(华为p30pro掉水里了有影响吗)

    华为p30pro掉水里了怎么处理(华为p30pro掉水里了有影响吗)

  • 魅族16s怎么添加联系人(魅族16s怎么添加快手极速版桌面)

    魅族16s怎么添加联系人(魅族16s怎么添加快手极速版桌面)

  • 笔记本内存条能装几个(笔记本内存条能装在台式机上吗)

    笔记本内存条能装几个(笔记本内存条能装在台式机上吗)

  • 360扩展器怎么设置(360扩展器怎么设置视频)

    360扩展器怎么设置(360扩展器怎么设置视频)

  • win10网络重置无法上网(win10网络重置无法上网,显示没有有效的IP)

    win10网络重置无法上网(win10网络重置无法上网,显示没有有效的IP)

  • Windows 10如何修复LSP(Windows10如何修复引导)

    Windows 10如何修复LSP(Windows10如何修复引导)

  • 【Web前端基础】实验9 表单页面设计(web前端基本知识)

    【Web前端基础】实验9 表单页面设计(web前端基本知识)

  • Tesla都使用什么编程语言?(特斯拉适用于什么车型)

    Tesla都使用什么编程语言?(特斯拉适用于什么车型)

  • js中var如何声明作用域(js中var的用法)

    js中var如何声明作用域(js中var的用法)

  • python中的int函数如何使用?(python里int函数)

    python中的int函数如何使用?(python里int函数)

  • 企业向股东借款个人所得税
  • 增值税如何进行税收筹划
  • 资金什么情况下退出企业
  • 实验用品包括实验仪器吗
  • 完工百分比法完工进度怎么算
  • 发票普票一个月能开多少
  • 累计专项扣除和专项附加扣除
  • 接受虚开增值税 经侦立案
  • 作为福利手段福利概念的三个条件是
  • 工程安装公司暂估人工费如何做会计核算?
  • 企业收到免税发票后怎么开票
  • 凭证工本费的账务处理
  • 对外来发票金额怎么算
  • 一般代开增值税多少个点?
  • 建安发票税率是多少2011年
  • 计算并结转本月应交的城建税700元
  • 定期定额自行申报表计税依据
  • 社保和医保是分开到账吗
  • 地毯属于什么类别垃圾分类
  • 工会财务总结报告
  • 去年的进项票今年可以抵吗
  • 兼职劳务报酬要交个税吗
  • 已开票不确认收入未收款怎么做账
  • 如何在excel中链接图片对方能显示
  • 汇算清缴期业务包括哪些
  • 笔记本电脑怎么重装系统
  • 以租代购算固定资产吗
  • php面向对象的三大特征
  • linux怎么用微信
  • 高新技术企业的研发费用加计扣除
  • 外销收入含税吗
  • os x 10.10 yosemite自动纠正怎么关?os x yosemite自动纠正功能关闭教程
  • 一次性收入怎么交税
  • 嘴型融合 wav2lip 升级版
  • yolov教程
  • 没有进项开销项需要交几个点
  • html5简单小游戏代码
  • 有趣的html简单代码
  • 结转出口退税分录
  • 备用金管理方式
  • 产品结转基本步骤有哪些
  • 购进车辆的会计分录
  • 嵌入式软件行业在加计扣除的时候可以看作是制造业吗
  • 公章变更需要到哪个部门
  • 增值税纳税申报类型怎么填
  • mysql用中文字段
  • 小企业的固定资产的折旧方法可以根据需要
  • 专家劳务费可以在手机操作吗
  • 存货在报表里是如何体现的
  • 以公司名义买500万的车省多少税
  • 公司注销前的发票怎么查
  • 文化事业建设费会计分录
  • 经营性租赁资产
  • 库存商品期末为负数
  • 核定征收的一般纳税人进项税额抵扣
  • 买材料含税价怎么算
  • 佣金付给别人公司合法吗
  • 普通发票和增值税发票的区别图片
  • 公司帐户转到法人账户
  • sqlserver游标的使用
  • 使用 GUID 值来作为数据库行标识讲解
  • mysql8.0无法启动
  • 蓝屏代码bad_system_config_info
  • 批处理在windows中的典型应用
  • 删除系统桌面
  • [置顶]JM259194
  • linux修改目录路径
  • vue cli mock
  • nodejs搭建个人博客网站
  • fragment中嵌套fragment
  • js debounce实现
  • javascript中变量的命名规则有哪些?
  • javascript面向对象编程
  • python坑人代码
  • 吉林省税务局发票查询真伪
  • 国家税务四川税务总局APP
  • 收到虚开增值税专用发票怎么处理
  • 审计如何聚焦主责主业
  • 独生子女补贴和退休金一起发吗
  • 天津环保网站官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设