私のデータオブジェクト:
data: {
selected: {
'type': null,
'instrument': null
},
私のテンプレート:
<select v-model="selected['instrument']" @change="switchFilter('instrument', $event)">
<option v-for="instrument in instruments" :value="instrument.value">@{{ instrument.text }}</option>
</select>
<select v-model="selected['type']" @change="switchFilter('type', $event)">
<option v-for="type in types" :value="type.value">@{{ type.text }}</option>
</select>
選択した両方のインデックスを同時に見るにはどうすればよいですか?インデックスが更新されるたびに、このようなことをしたいです。
watch: {
selected: function(o, n) {
...
}
}
Vueの watcher で提供されるdeep
オプションを使用できます。ドキュメントに記載されているとおり:
オブジェクト内のネストされた値の変更も検出するには、options引数にdeep:trueを渡す必要があります。配列の突然変異をリッスンするためにそうする必要はないことに注意してください。
コードは次のようになります。
watch: {
'selected': {
handler: function (val, oldVal) {
console.log('watch 1', 'newval: ', val, ' oldVal:', oldVal)
},
deep: true
}
}
watch: {
'selected.type': function (newSelectedType) {
console.log(newSelectedType)
},
'selected.instrument': function (newSelectedinstrument) {
console.log(newSelectedinstrument)
}
}
selected
から新しいデータを計算しようとしている場合、計算プロパティを使用できます。Vueのデータはリアクティブであるため、計算プロパティも変更を検出できます。データの。
単一の関数を使用してオブジェクト全体を監視する場合は、$watch
with deep: true
:
mounted () {
this.$watch('$data.selected', this.onSelectedUpdate, { deep: true })
}
ご了承ください '$data.selected'
は文字列で、Vueはそれを解析します。
そしてあなたの方法で:
onSelectedUpdate (newSelected) {
console.log(newSelected)
}
これができると思います:
watch: {
$data: {
handler: function(val, oldVal) {
console.log(val)
},
deep: true
}
},