一:父传子

父组件代码如下:

<template>
    <div class="father">
   <child :message='message' :message2='message2'></child>
</div>
</template>
<script>
import child from '@/components/child.vue'
export default {
    components:{
     child
    },
    data(){
  return{
      message: '我是来自父组件的第一条message',
      message2:'我是来自父组件的第二条message'
  }
    }
}
</script>

子组件代码如下:

<template>
    <div class="child">{{message}}<br/>{{message2}}</div>
</template>
<script>
export default {
   props:['message','message2']
}
</script>

运行结果如下图:

二:子传父

子组件代码如下:

<template>
    <div class="child" >
    <button @click="sendMsgToParent">点击开始传值</button>

    </div>
</template>
<script>
export default {
   data(){
       return{
       }
   },
   methods:{
       sendMsgToParent(){
     this.$emit('listenMsg','我是来自子组件的message')
       }
   }
}
</script>

父组件代码如下:

<template>
    <div class="father">
        {{msg}}
   <child v-on:listenMsg="showMsg"></child>
</div>
</template>
<script>
import child from '@/components/child.vue'
export default {
    components:{
     child
    },
    data(){
  return{
      msg:'我是来自父组件的msg'
  }
    },
    methods:{
        showMsg(data){
           this.msg = data
        }
    }
}
</script>

运行结果如下:

 

点击按钮后,运行结果如下:

三:非父子

如果是非父子进行组件通信的话,我们首先要创建一个桥梁,通过这个桥梁使两个组件产生联系。

首先创建‘桥梁’-----bus.js,代码如下

import Vue from 'vue'
const bus = new Vue()
export default bus

然后组件A通过点击事件想将数据发送给组件B,代码如下

<template>
    <div class="hello">
        {{number}}<br/>
        <button @click="sendNumber()">发送</button>
        </div>
</template>
<script>
import bus from '../assets/js/bus.js'
export default {
   data(){
       return{
           number:'我是hello组件参数123'
       }
   },
   methods:{
       sendNumber(){
    bus.$emit('acceptNumber',this.number)
       }
   } 
}
</script>

组件B接受发送过来的数据,代码如下

<template>
    <div class="world">
        {{number}}
        </div>
</template>
<script>
import bus from '../assets/js/bus.js'
export default {
   data(){
       return{
           number:'我是world组件参数456'
       }
   },
   created(){
       bus.$on('acceptNumber',data =>{
           this.number = data
       })
   }
}
</script>

代码运行后,演示结果如下图

 

当点击发送按钮后,演示结果如下图

至此,非父子组件通信完成。

 

posted on 2019-07-10 15:16  心上有杨  阅读(407)  评论(0编辑  收藏  举报