Vue - 深入观察一组对象并计算变化?
2022-08-30 04:40:18
我有一个名为数组,其中包含如下对象:people
以前
[
{id: 0, name: 'Bob', age: 27},
{id: 1, name: 'Frank', age: 32},
{id: 2, name: 'Joe', age: 38}
]
它可以更改:
后
[
{id: 0, name: 'Bob', age: 27},
{id: 1, name: 'Frank', age: 33},
{id: 2, name: 'Joe', age: 38}
]
请注意,弗兰克刚满33岁。
我有一个应用程序,我正在尝试观察people数组,当任何值更改时,然后记录更改:
<style>
input {
display: block;
}
</style>
<div id="app">
<input type="text" v-for="(person, index) in people" v-model="people[index].age" />
</div>
<script>
new Vue({
el: '#app',
data: {
people: [
{id: 0, name: 'Bob', age: 27},
{id: 1, name: 'Frank', age: 32},
{id: 2, name: 'Joe', age: 38}
]
},
watch: {
people: {
handler: function (val, oldVal) {
// Return the object that changed
var changed = val.filter( function( p, idx ) {
return Object.keys(p).some( function( prop ) {
return p[prop] !== oldVal[idx][prop];
})
})
// Log it
console.log(changed)
},
deep: true
}
}
})
</script>
我基于昨天提出的有关数组比较的问题,并选择了最快的工作答案。
因此,在这一点上,我希望看到以下结果:{ id: 1, name: 'Frank', age: 33 }
但是我回到控制台中的全部内容是(请记住,我在组件中拥有它):
[Vue warn]: Error in watcher "people"
(found in anonymous component - use the "name" option for better debugging messages.)
在我制作的代码笔中,结果是一个空数组,而不是更改的已更改对象,这将是我所期望的。
如果有人能建议为什么会发生这种情况,或者我在这里哪里出错了,那么将不胜感激,非常感谢!