如何在 Vue 2 中查看数据对象中的所有键
How do I watch all keys in a data object in Vue 2
我的数据对象:
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) {
...
}
}
watch: {
'selected.type': function (newSelectedType) {
console.log(newSelectedType)
},
'selected.instrument': function (newSelectedinstrument) {
console.log(newSelectedinstrument)
}
}
如果你只是想从selected
计算一个新数据,你可以只使用计算属性,因为Vue的数据是反应性的,计算属性也可以检测数据的变化。
如果想用一个函数看整个对象,可以用$watch
和deep: true
:
mounted () {
this.$watch('$data.selected', this.onSelectedUpdate, { deep: true })
}
注意'$data.selected'
是一个字符串,Vue会解析它
在你的方法中:
onSelectedUpdate (newSelected) {
console.log(newSelected)
}
您可以使用 vue 的 watcher 提供的 deep
选项。如文档中所述:
To also detect nested value changes inside Objects, you need to pass in deep: true in the options argument. Note that you don’t need to do so to listen for Array mutations.
您的代码将如下所示:
watch: {
'selected': {
handler: function (val, oldVal) {
console.log('watch 1', 'newval: ', val, ' oldVal:', oldVal)
},
deep: true
}
}
我认为你可以这样做:
watch: {
$data: {
handler: function(val, oldVal) {
console.log(val)
},
deep: true
}
},
我的数据对象:
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) {
...
}
}
watch: {
'selected.type': function (newSelectedType) {
console.log(newSelectedType)
},
'selected.instrument': function (newSelectedinstrument) {
console.log(newSelectedinstrument)
}
}
如果你只是想从selected
计算一个新数据,你可以只使用计算属性,因为Vue的数据是反应性的,计算属性也可以检测数据的变化。
如果想用一个函数看整个对象,可以用$watch
和deep: true
:
mounted () {
this.$watch('$data.selected', this.onSelectedUpdate, { deep: true })
}
注意'$data.selected'
是一个字符串,Vue会解析它
在你的方法中:
onSelectedUpdate (newSelected) {
console.log(newSelected)
}
您可以使用 vue 的 watcher 提供的 deep
选项。如文档中所述:
To also detect nested value changes inside Objects, you need to pass in deep: true in the options argument. Note that you don’t need to do so to listen for Array mutations.
您的代码将如下所示:
watch: {
'selected': {
handler: function (val, oldVal) {
console.log('watch 1', 'newval: ', val, ' oldVal:', oldVal)
},
deep: true
}
}
我认为你可以这样做:
watch: {
$data: {
handler: function(val, oldVal) {
console.log(val)
},
deep: true
}
},