概述
在实际工作中,组件之间传值不仅仅是父子组件之间的传值,有时候需要跨组件进行传值,甚至没啥关系的组件之间进行传值,EventBus正好解决了这个问题.
看过帖子,说EventBus类似vuex都是对全局数据进行管理,但vuex相对规范些.下面简单介绍下EventBus的使用.
一 创建EventBus
有两种方法,但是原理我认为都差不多.
①在main.js中,引入Vue构造函数,在构造函数的显示原型上添加$EventBus,并赋值new Vue()
import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
// 这里给EventBus复制了实例化Vue对象
Vue.prototype.$EventBus = new Vue()
new Vue({
render: h => h(App),
}).$mount('#app')
②建立一个EventBus的js文件
// event-bus.js这里就是哪里用哪里引
import Vue from 'vue'
export const EventBus = new Vue()
二 创建两个,没什么关系的组件(目的A组件向B组件发送消息)
<template>
<div>
<div>
<aPage></aPage>
</div>
<bPage></bPage>
</div>
</template>
三 A组件声明方法触发EventBus(因为我们把EventBus绑在全局vue原型上,所以直接this调用,$emit发送消息)
<template>
<div>
<span>这里是A组件</span>
<button @click="btnSend">点击向B组件发消息</button>
</div>
</template>
<script>
export default {
name: 'aPage',
data() {
return {}
},
methods: {
btnSend() {
this.$EventBus.$emit('aMsg', '来自A页面的消息')
},
},
}
</script>
四 B组件进行接收(这里注意使用完EventBus要对EventBus进行销毁,防止对全局污染)
<template>
<div>
<div>这里是B组件</div>
<span>{{msg}}</span>
</div>
</template>
<script>
export default {
name: 'bPage',
data() {
return {
msg: ""
}
},
methods: {
},
mounted() {
this.$EventBus.$on('aMsg', (msg)=>{
this.msg = msg
})
},
beforeDestroy() {
this.$EventBus.$off('aMsg')
},
}
</script>
五 效果
最后
以上就是难过犀牛为你收集整理的Vue组件传值EventBus的全部内容,希望文章能够帮你解决Vue组件传值EventBus所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复