vue数据监视原理

Vue.js 深入浅出地监视data中的所有层级数据,通过setter实现对象和数组的响应式变化。对于新增属性,需使用Vue.set或$set确保响应性。数组更新应使用内置方法,如push、splice等,避免直接修改导致视图不更新。在处理复杂数据更新时,推荐使用新对象替换原有对象以触发响应式更新。
摘要由CSDN通过智能技术生成
1. vue会监视data中所有层次的数据
2. 如何监测对象中的数据?

通过setter实现监视,且要在new Vue时就传入要监测的数据。
(1)对象中后追加的属性,vue默认不做响应式处理
(2)如果需要给后添加的属性做响应式,使用如下API:

  • Vue.set(target, propertyName/index, value);
  • this.$set(target, propertyName/index, value);

有时你可能需要为已有对象赋值多个新 property,比如使用 Object.assign() 或 _.extend()。但是,这样添加到对象上的新 property 不会触发更新。在这种情况下,你应该用原对象与要混合进去的对象的 property 一起创建一个新的对象。

// 代替 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
3. 如何监测数组中的数据?

通过包裹数组更新元素的方法实现,本质就是做了两件事情:
(1)调用原生对应的方法对数组进行更新。
(2)重新解析模板,进而更新页面。

4. 在vue修改数组中的某个元素一定要用如下方法:

(1)使用这些API:push(), pop(), shift(), unshift(), splice(), sort(), reverse()
(2)Vue.set() 或 vm.$set()
(3)如果使用非变更方法(如filter(), concat(), slice() 不会改变原数组)时,可以用新数组替换旧数组

example1.items = example1.items.filter(function (item) {
  return item.message.match(/Foo/)
})

特别注意:Vue.set()和vm.$set()不能给vm或vm的根数据(vm._data)对象添加属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值