一:父传子
父组件代码如下:
<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>
代码运行后,演示结果如下图
当点击发送按钮后,演示结果如下图
至此,非父子组件通信完成。