Ifn*_*not 3 observer-pattern vue.js
我创建了一个vue对象来进行数据反应:
let vm = new Vue({
data () {
return {
myData: {}
}
},
watch: {
myData (value) {
console.log('changed')
}
}
})
Run Code Online (Sandbox Code Playgroud)
当我将/推入/编辑/删除到时vm.myData
,一切正常,监视者将其发送给我changed
。
现在,我只想通过“触摸”(没有数据版本)来获取changed
事件。我可以为此调用观察者的内部方法吗? vm.myData
Ifn*_*not 10
好的,我有解决方案。
我们可以notify()
从附加的观察器触发该方法:
vm.myData.__ob__.dep.notify()
Run Code Online (Sandbox Code Playgroud)
当vuejs修补原始方法以使数据具有响应性时,我从源头找到了它。
https://github.com/vuejs/vue/blob/dev/src/core/observer/array.js#L42
因为它是一个对象(对象通过引用传递,而不是通过值传递),所以可以这样做
vm.myData = Object.assign({},vm.myData);
Run Code Online (Sandbox Code Playgroud)
这会创建一个具有完全相同值的新对象,但它是一个新对象,因此会触发观察者。
https://codepen.io/jacobgoh101/pen/RQeLoM?editors=1011
归档时间: |
|
查看次数: |
4189 次 |
最近记录: |