gpt4 book ai didi

javascript - Vue - 深入观察一系列对象并计算变化?

转载 作者:IT王子 更新时间:2023-10-29 02:47:39 24 4
gpt4 key购买 nike

我有一个名为 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}
]

注意 Frank 刚满 33 岁。

我有一个应用程序,我试图在其中观察人员数组,当任何值发生变化时记录变化:

<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>

我基于 question that I asked yesterday关于数组比较并选择最快的工作答案。

因此,此时我希望看到以下结果:{ id: 1, name: 'Frank', age: 33 }

但我在控制台中得到的只是(记住我在组件中有它):

[Vue warn]: Error in watcher "people" 
(found in anonymous component - use the "name" option for better debugging messages.)

并且在 codepen that I made ,结果是一个空数组,而不是我所期望的已更改的已更改对象。

如果有人能提出为什么会发生这种情况或我哪里出了问题,那么将不胜感激,非常感谢!

最佳答案

您在旧值和新值之间的比较函数有问题。最好不要把事情复杂化,因为这会增加你以后的调试工作量。你应该保持简单。

最好的方法是创建一个person-component 并在其自己的组件中分别观察每个人,如下所示:

<person-component :person="person" v-for="person in people"></person-component>

请在下面找到一个用于观察内部人员组件的工作示例。如果你想在父端处理它,你可以使用$emit向上发送一个事件,包含被修改的人的id

Vue.component('person-component', {
props: ["person"],
template: `
<div class="person">
{{person.name}}
<input type='text' v-model='person.age'/>
</div>`,
watch: {
person: {
handler: function(newValue) {
console.log("Person with ID:" + newValue.id + " modified")
console.log("New age: " + newValue.age)
},
deep: true
}
}
});

new Vue({
el: '#app',
data: {
people: [
{id: 0, name: 'Bob', age: 27},
{id: 1, name: 'Frank', age: 32},
{id: 2, name: 'Joe', age: 38}
]
}
});
<script src="https://unpkg.com/vue@2.1.5/dist/vue.js"></script>
<body>
<div id="app">
<p>List of people:</p>
<person-component :person="person" v-for="person in people"></person-component>
</div>
</body>

关于javascript - Vue - 深入观察一系列对象并计算变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41135188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com