今天使用vue2的watch属性时真的气死我了,将父组件的对象传递给子组件,子组件用watch来接受,但是结果就是不如意,父组件的对象怎么改变,子组件的watch方法就是没反应。
最后百度了下才知道vue2中的props的设计模式为单向数据流,就是说只能从父组件流向子组件,子组件是无法流回父组件,也就是无法从子组件修改父组件传来的值。至于为什么vue2无法直接监听对象呢,一开始以为是Object.defineProperty的问题,但是后来做了实验发现和它也没啥关系,主要是vue2.x为了提高数据绑定的性能主动放弃这样监听模式
因此我们在监听时应该通过computed函数来中转下,在computed函数中定义专门返回自己监听的对象,然后在watch中监听自己所定义的方法。代码如下:
props: {
unReadObj: {
type: Object,
default: null
}
},
computed:{
// 定义方法,返回自己监听的值
getUnReadObj(){
return this.unReadObj
}
},
watch: {
getUnReadObj:{
handle(new_o1,old_o2){
console.log(new_o1,old_o2)
},
// 深度监听,在vue3中使用immediate来开启深度监听
deep:true,
}
},
其他传值的逻辑正常写就行
以上属于个人的小笔记,也是小见解,如果有错误一定立刻改正。。。
版权归原作者 我爱吃干果 所有, 如有侵权,请联系我们删除。