Vue不能检测的数组变化 对象变化

Posted eret9616

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue不能检测的数组变化 对象变化相关的知识,希望对你有一定的参考价值。

数组:

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

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

 

为了解决第一类问题,以下两种方式都可以实现和 vm.items[indexOfItem] = newValue相同的效果,同时也将触发状态更新:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

你也可以使用 vm.$set 实例方法,该方法是全局方法 Vue.set 的一个别名:

vm.$set(vm.items, indexOfItem, newValue)

为了解决第二类问题,你可以使用 splice

vm.items.splice(newLength)

 

 

对象:

Vue 不能检测对象属性的添加或删除:

对于已经创建的实例,Vue 不能动态添加根级别的响应式属性。但是,可以使用 Vue.set(object, key, value) 方法向嵌套对象添加响应式属性。例如,对于:

var vm = new Vue({
data: {
userProfile: {
name: ‘Anika‘
}
}
})

你可以添加一个新的 age 属性到嵌套的 userProfile 对象:

Vue.set(vm.userProfile, ‘age‘, 27)

你还可以使用 vm.$set 实例方法,它只是全局 Vue.set 的别名:

vm.$set(vm.userProfile, ‘age‘, 27)

有时你可能需要为已有对象赋予多个新属性,比如使用 Object.assign() 或 _.extend()。在这种情况下,你应该用两个对象的属性创建一个新的对象。所以,如果你想添加新的响应式属性,不要像这样:

Object.assign(vm.userProfile, {
age: 27,
favoriteColor: ‘Vue Green‘
})

你应该这样做:

vm.userProfile = Object.assign({}, vm.userProfile, {
age: 27,
favoriteColor: ‘Vue Green‘
})

 

 

 






















以上是关于Vue不能检测的数组变化 对象变化的主要内容,如果未能解决你的问题,请参考以下文章

☀️Vue2.0为什么不能检查数组的变化?又该如何解决?

☀️Vue2.0为什么不能检查数组的变化?又该如何解决?

vue对象或者数组中数据变化但是视图没有更新

Vue中为什么不能检测数组的变化-02-Proxy

关于 vue 不能 watch 数组变化 和 对象变化的解决方案

关于vue无法侦听数组及对象属性的变化的解决方案