全部須要通訊的組件共用一個事件對象。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的插件。事件