您可以使用$watch('arr.0', () => {}) 或$watch('dict.keyName', () => {}) 独立观察数组或字典中的每个元素的变化
来自https://vuejs.org/v2/api/#vm-watch:
注意:当改变(而不是替换)一个对象或数组时,
旧值将与新值相同,因为它们引用
相同的对象/数组。 Vue 不保留预突变值的副本。
但是,您可以独立地迭代 dict/array 和 $watch 每个项目。 IE。 $watch('foo.bar') - 这会监视对象 'foo' 的属性 'bar' 的变化。
在这个例子中,我们观察 arr_of_numbers 中的所有项目,以及 arr_of_objects 中所有项目的 'foo' 属性:
mounted() {
this.arr_of_numbers.forEach( (index, val) => {
this.$watch(['arr_of_numbers', index].join('.'), (newVal, oldVal) => {
console.info("arr_of_numbers", newVal, oldVal);
});
});
for (let index in this.arr_of_objects) {
this.$watch(['arr_of_objects', index, 'foo'].join('.'), (newVal, oldVal) => {
console.info("arr_of_objects", this.arr_of_objects[index], newVal, oldVal);
});
}
},
data() {
return {
arr_of_numbers: [0, 1, 2, 3],
arr_of_objects: [{foo: 'foo'}, {foo:'bar'}]
}
}