vue常用组件间的通信方式(prop、自定义事件、全局事件总线)
一、父子间
- prop(父组件向子组件)
父组件中:用冒号在子组件中绑定数据user
<template>
<div>
<Calendar :user="users"></Calendar>
</div>
</template>
<script>
import Calendar from './components/calendar.vue'
export default {
name: 'Calendar ',
components: {
Calendar,
},
data() {
return {
users: 'user'
}
},
子组件中:用prop接受user
<template>
<div>
</div>
</template>
<script>
export default {
data() {
return {
}
},
prop:{ 'user': String}
2.自定义事件(子组件向父组件)
子组件中用emit触发事件
首先在子组件中需要传递数据的地方写下emit事件
<template>
<div>
</div>
</template>
<script>
export default {
data() {
return {
}
},
created() {
let a = 13;
this.$emit('getChildData',a)// getChildData为事件名,a为要传的数据,要传的数据可以为多项,用逗号隔开
}
然后在父组件中定义事件和方法:
<template>
<div>
<Calendar :user="users" @getChildData="getData"></Calendar>
</div>
</template>
<script>
import Calendar from './components/calendar.vue'
export default {
name: 'Calendar ',
components: {
Calendar,
},
data() {
return {
users: 'user'
},
methods: {
getData(data){ //data为传入的数据,假如传入数据为多个,此时data参数也为多个,用逗号隔开
console.log(data); // 13
}
}
},
3.全局事件总线(用于任意组件间通信)
首先要安装全局事件总线,全局事件总线安装在main.js文件中
new Vue({
render: h =>h(app),
beforeCreate(){
Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
}
...
}).$mount('#app')
使用事件总线:首先创建两个组件A和B,A把data传给B
组件A:
methods: {
senddata() {
this.$bus.$emit('data',666)//data为事件名,666为要传的数据
}
}
组件B:
mountes() {
this.$bus.$on('data', (data) => {
console.log('我是B组件,收到了数据', data) //666
})
}
beforeDestroy() {
this.$bus.$off('data')//解绑当前组件所用到的事件
}
也可以事件回调写在methods中:
methods() {
demo(data) { ... }
}
mountes() {
this.$bus.$on('data',this.demo})
}
beforeDestroy() {
this.$bus.$off('data')//解绑当前组件所用到的事件
}
4.
浙公网安备 33010602011771号