“后端朋友来学前端。”在Vue中,使用全局事件总线实现组件间的通信我想她了。前言上一篇文章写了在vue中使用Props实现组件间的通信,这是组件间最简单最基本的通信方式。父组件通过props向下传递数据给子组件,当子组件有事情要告诉父组件时,它会通过$emit事件告诉父组件。对于父子组件,这种传递方式比较方便实用,但是对于孙子或者兄弟组件就不太友好了。在Vue自身的生态中,也有一个独立的Vuex库来处理组件间的通信,但很多时候,我们并不需要使用Vuex这样的大杀器,而是可以考虑Vue中更简单的事件总线,即EventBus。这里有一个简单的想法:一旦在项目中看到某段代码,或者是多次点击才能获取的变量,或者获取方式相同,就要考虑是否可以让代码实现重用,我们要学会偷懒。只有偷懒,才能更快地前进。开始今天的正文吧...1.什么是globaleventbus1.1?组件之间的交互意味着我们可以在组件之间共享数据。无论是props、EventBus、Vuex、发布订阅等实现组件交互,本质都是实现数据共享。要解决这个问题,使用全局事件总线要容易得多。不过今天的文章主要是先带大家去使用,周末再拉原理。EventBus也称为事件总线。在Vue中,可以使用EventBus作为通信桥梁的概念,就像所有的组件共享同一个事件中心,可以向这个中心注册发送事件或者接收事件,这样组件就可以并行上下通知其他组件,但是它太方便了,所以如果使用不慎,就会造成难以维护的灾难。因此,需要一个更完善的Vuex作为状态管理中心,将通知的概念提升到共享状态层面。1.2.安装全局事件总线//成为事件总线的条件://1.所有的组件对象都必须能够看到这个总线对象,所以我们把这个对象放在Vue原型中//2.这个事件总线对象必须能够调用$on和$emit方法(总线对象必须是Vue的实例化对象或者组件对象)来确定全局事件总线:将vm对象作为事件总线挂载到prototypeobjectofvueimportVuefrom'vue'importAppfrom'./App.vue'Vue.config.productionTip=false//全局总线的使用说明//使用全局总线时,比较好的应用是介于兄弟组件,祖孙组件,这些组件之间不能直接通信,使用全局事件总线Eventbus方便很多Vue.prototype.$bus=this}}).$mount('#app')1.3.基本用例:在App组件中引入一个demo组件,demo组件中有一个按钮,点击可以修改app组件传递给子组件的值并更新视图。App组件
