一:父传子
父组件代码如下:
<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>
代码运行后,演示结果如下图

当点击发送按钮后,演示结果如下图
至此,非父子组件通信完成。
浙公网安备 33010602011771号