全部须要通讯的组件共用一个事件对象。new Vue(),新new一个vue对象,而后全部组件都访问这个对象,经过这个对象$emit事件,也经过这个对象$on监听事件。vue
实现一:直接在单文件里面实例化根Vue的时候,在data里return一个属性,值为new Vue(),例如bus: new Vue()函数
在具体的组件页面上,直接用this.$root.bus.$emit('eventName')发送事件。this
在另外一个组件页面的mounted函数里面,用this.$root.bus.$on('eventName', () => { // 一些要作的事 } )监听事件。插件
实现二:把共用的事件对象单独抽成一个bus.js文件,哪一个组件要用到就引用进来,而后$emit或者$on。对象
实现三:抽成bus.js文件后,还能够做为Vue的插件。事件