VueJS:手动触发对观察到的更新 object/array
VueJS : manually trigger an update into observed object/array
我为数据反应创建了一个 vue 对象:
let vm = new Vue({
data () {
return {
myData: {}
}
},
watch: {
myData (value) {
console.log('changed')
}
}
})
当我推送/编辑/删除到vm.myData
时,一切正常,观察者发送给我changed
。
现在,我只想通过 "touching" vm.myData
获得 changed
事件 (没有数据编辑)。我可以为此调用观察者的内部方法吗?
既然是对象(对象是传引用,不是传值),可以这样写
vm.myData = Object.assign({},vm.myData);
这会创建一个具有完全相同值的新对象,但它是一个新对象,因此会触发观察器。
好的,我有办法了。
我们可以从附加的观察者触发 notify()
方法:
vm.myData.__ob__.dep.notify()
当 vuejs 修补原始方法以使数据响应时,我从源代码中找到了它。
https://github.com/vuejs/vue/blob/dev/src/core/observer/array.js#L42
我为数据反应创建了一个 vue 对象:
let vm = new Vue({
data () {
return {
myData: {}
}
},
watch: {
myData (value) {
console.log('changed')
}
}
})
当我推送/编辑/删除到vm.myData
时,一切正常,观察者发送给我changed
。
现在,我只想通过 "touching" vm.myData
获得 changed
事件 (没有数据编辑)。我可以为此调用观察者的内部方法吗?
既然是对象(对象是传引用,不是传值),可以这样写
vm.myData = Object.assign({},vm.myData);
这会创建一个具有完全相同值的新对象,但它是一个新对象,因此会触发观察器。
好的,我有办法了。
我们可以从附加的观察者触发 notify()
方法:
vm.myData.__ob__.dep.notify()
当 vuejs 修补原始方法以使数据响应时,我从源代码中找到了它。
https://github.com/vuejs/vue/blob/dev/src/core/observer/array.js#L42