vue中央事件总线eventBus的简单理解和使用

公共事件总线eventBus的实质就是建立一个vue实例,经过一个空的vue实例做为桥梁实现vue组件间的通讯。它是实现非父子组件通讯的一种解决方案。vue

用法以下:vuex

第一步:项目中建立一个js文件(我一般给它取个名字为bus.js),引入vue,建立一个vue实例,导出这个实例,代码以下(一共就两行):学习

 

1 import Vue from 'Vue'
2 export default new Vue
 
第二步:在两个须要通讯的两个组件中分别引入这个bus.js
 
   1 import Bus from '这里是你引入bus.js的路径' // Bus可自由更换喜欢的名字 
 
第三步:传递数据的组件里经过vue实例方法$emit发送事件名称和须要传递的数据。(发送数据组件)
 
  1 Bus.$emit('click',data) // 这个click是一个自定义的事件名称,data就是你要传递的数据。 
 
第四步:被传递数据的组件内经过vue实例方法$on监听到事件和接受到数据。(接收数据的组件)这里一般挂载监听在vue生命周期created和mounted当中的一个,具体使用场景须要具体的分析,这里不说这个。
 
1 Bus.$on('click',target => { 2   console.log(target)  // 注意:发送和监听的事件名称必须一致,target就是获取的数据,能够不写target。只要你喜欢叫什么均可以(固然了,这必定要符合形参变量的命名规范)
3 })
经过以上的四步其实就已经实现了最简单的eventbus的实际应用了。
 
可是到这儿后,必定要注意一个最容易忽视,又必然不能忘记的东西,那就是 清除事件总线eventBus.
不手动清除,它是一直会存在的,这样的话,有个问题就是反复进入到接受数据的组件内操做获取数据,本来只执行一次的获取的操做将会有屡次操做。如上我所举的例子,只是打印屡次传过来的数据。但你想一想,实际开发中是不会这么简单的打印这个数据到控制台,原本只会触发并只执行一次,如今变成了屡次,这个问题就很是严重了,大家各类脑补具体的项目开发场景吧。
 
第五步:在vue生命周期beforeDestroy或者destroyed中用vue实例的$off方法清除eventBus
1 beforeDestroy(){ 2     bus.$off('click') 3  }

 

总结一下,这里只是介绍如何使用eventBus来解决非父子组件通讯,可是当项目较大较复杂时,并不适合。到那时,vuex才是vue给咱们提供的最理想的方式。spa

注意:以上存粹是我的的理解,有不一样观点或者其余建议的欢迎交流学习!code

相关文章
相关标签/搜索