【发布时间】:2021-05-23 12:52:19
【问题描述】:
我想在 for-loop 中设置一个对象属性,并注意这些变化,但不知何故,Vue 根本不会监听 watch 属性上的所有变化。
这是我的测试代码,用于简化我的问题 (https://jsfiddle.net/hn2wepc9/)。
如果单击按钮,它应该在控制台中记录 5 行(因为 loop 方法),但它只记录 1。我不明白为什么 Vue 在我使用时根本不听所有更改Vue.set() 在 for 循环中并尝试观察这些变化。
<div id="app">
<button @click="loop">Button</button>
</div>
new Vue({
el: '#app',
data: () => {
return {
obj: {
name: 'John Doe'
}
}
},
methods: {
loop() {
for (let i = 0; i < 5; i++) {
Vue.set(this.obj, 'name', 'Dohn Joe ' + i);
}
}
},
watch: {
obj: {
deep: true,
handler(newVal, oldVal) {
window.console.log(newVal.name + ' - ' + new Date().toLocaleString());
}
}
}
});
【问题讨论】:
-
顺便说一句,您不需要在这里使用
Vue.set,因为obj.name已经存在于data()的init 中。可以直接设置:this.obj.name = 'Dohn Joe ' + i.