我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue2中无法检测到数组变动的原因及解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue2中无法检测到数组变动的原因及解决

由于JavaScript 的限制,Vue 不能检测以下数组的变动:

  • 当利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
  • 当修改数组的长度时,例如:vm.items.length = newLength

var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})
vm.items[1] = 'x' // 不是响应性的
vm.items.length = 2 // 不是响应性的

解决方法


手动添加监听
// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
vm.$set(vm.items, indexOfItem, newValue)
使用数组的变异方法,因为vue对数组的变异方法实现了响应式
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

为什么Vue2.0中监听不到两种数组的变化?

官方文档中对于这两点都是简要的概括为“由于JavaScript的限制”无法实现,而Object.defineProperty是实现检测数据改变的方案,那这个限制是指Object.defineProperty吗?

其实原因并不是因为Object.defineProperty()存在漏洞,而是出于性能问题的考虑。 Object.defineProperty 在数组中的表现和在对象中的表现是一致的,数组的索引就可以看做是对象中的 key 。

  • 通过索引访问或设置对应元素的值时,可以触发 getter 和 setter 方法
  • 通过 push 或 unshift 会增加索引,对于新增加的属性,需要再手动初始化才能被 observe 。
  • 通过 pop 或 shift 删除元素,会删除并更新索引,也会触发 setter 和 getter 方法。

所以, Object.defineProperty 是有监控数组下标变化的能力的,只是vue2.x放弃了这个特性。

源码分析

Object.property是可以检测到通过索引改变数组的操作的,而Vue没有实现。那我们看看源码:

Vue3.0

Vue3.0中则用proxy代替了Object.defineProperty()解决了其存在的问题

以上就是Vue2中无法检测到数组变动的原因及解决的详细内容,更多关于Vue2 数组变动的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue2中无法检测到数组变动的原因及解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue无法检测到数组变动怎么解决

这篇“Vue无法检测到数组变动怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue无法检测到数组变动怎么解决”文章吧
2023-07-04

重装win7系统后检测不到u盘的原因及解决方法

很多人在遇到一些系统问题无法解决的时候,都会选择重新安装系编程统,但是重装之后会遇到各种各样的问题,最近就有用户发现重装win7系统之后,win7系统就检测不到u盘了,遇到这样的问题要怎么办呢?下面跟大家分享一下吧。 原因分析: 1
2023-06-07

Win7旗舰版中3dmax安装后无法正常启动的原因及解决方法

问:我的电脑安装的是win7旗舰版系统,但是在安装了3dmax软件之后,却发现虽然安装上了,但是无法正常启动是怎么回事。 原因解析: 出现这样的问题如果不是兼容性问题的话,那么一般就是由于用户的Windows系统文件安装不全导致的,一般会少
2023-06-06

Android中EditText+Button组合导致输入板无法收起的原因分析及解决办法

在Android开发中,录入信息是最基本的操作,使用非常广泛。但是Android对输入法弹出/收起的支持,并不是很好。对弹出,提供了force方式和implicit方式,对输入却没有提供force方式。可想而知,想弹能弹,想收不能收,这是多
2022-06-06

编程热搜

目录