vue computed 已声明props 传过来的值,watch 无法监听到
时间: 2023-09-06 17:02:07 浏览: 248
vue 子组件watch监听不到prop的解决
在Vue中,computed属性是根据其他属性计算得出的属性,而watch属性是用来监听属性值的变化并触发相应的处理函数。根据这两个属性的特性,watch是无法直接监听props传过来的值的。
原因是因为props是通过父组件传递给子组件的,子组件接收到的props是一种外部数据,它的变化是由父组件控制的,子组件无法直接修改props的值,只能通过触发事件让父组件去修改。
但是,我们可以利用watch来间接监听props传过来的值。方法是创建一个与props值相对应的data属性,并将props的值赋给这个data属性,在props发生变化时,通过watch监听这个data属性的变化。
例如,假设在父组件中传递了一个名为message的props到子组件中,我们可以创建一个与message相对应的data属性,并在创建子组件的时候将props的值赋给这个data属性:
```
props: ['message'],
data() {
return {
messageValue: this.message
}
}
```
然后,我们可以在watch中监听这个data属性:
```
watch: {
messageValue(newVal) {
console.log('props的值发生变化了:', newVal);
}
}
```
这样,当父组件中的message发生变化时,子组件通过watch就能监听到,并触发相应的处理函数。
总结起来,虽然watch无法直接监听props传过来的值,但是我们可以通过在子组件中创建一个与props相对应的data属性,并将props的值赋给这个data属性,然后通过watch监听这个data属性的变化,间接实现对props的监听。
阅读全文