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.)
そして、私が作成したコードペンでは、結果は空の配列であり、変更された変更されたオブジェクトではなく、私が期待したものになります。
誰かがこれがなぜ起こっているのか、または私がここで間違っているところを示唆できるなら、それは大いに感謝します、ありがとう!