vue组件传值问题

子组件A通过点击按钮事件传值给父组件,然后再把值从父组件传给子组件B,请问为什么只有第一次点击按钮的时候子组件B收到值了,以后多次点击按钮事件都不管用了。刷新的话还是只有第一次可以接收到值。
代码如下:

子组件A按钮点击传值事件:

goIndex(){
this.$emit('gogo','a');
}

父组件接收代码:
HTML:
<componentsA @gogo = "button" >子组件A</componentsA>
<componentsB :child-tab = "isAddedTab" >子组件B</componentsB>
JS:
export default {

data () {
    return {
        isAddedTab:''
    }
},
components: {
    moneyDetails,
    settings
},
methods: {
   button(e){
        console.log(e);
        this.isAddedTab = e;
   }, 
}

}

子组件B接收值:

props: ['childTab'],
watch: {

childTab(v){
 console.log(v);//这个v只有第一次点击子组件A按钮可以打印出来,再次点击按钮就打印不出来了
 }

},

阅读 2.8k
1 个回答

你$emit('gogo','a') 是个固定值a, vue是响应式的,如果isAddedTab值没变,不会再传值给B组件

相当于B组件一开始获得父组件传过来的isAddedTab值是空,因为父组件默认值是空,然后A组件按钮点击,事件回调给父组件,改变isAddedTab值为a,这时候因为isAddedTab改变所以传递给子组件B,B里面watch得到值a,然后你A组件按钮二次点击,事件会触发,但是因为isAddedTab值本来就是a,赋值再次赋为a,不会重复传递值给B组件,因为值根本没有发生变化,vue在这边是做过优化的,不会重复传递相同值

你如果需要A组件每次点击,B组件都要触发某些操作,那就A组件事件触发给父组件,父组件直接调用子组件B的某个方法就行,不用prop传值
如果是A组件点击返回一个值给B组件,你现在这么写没问题,当值变化的时候B组件才会获得通知,这个没问题,只是你demo里面每次传的值都一样,所以只打印1次

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题