vue2 event bus

今天來總結一下event bus的用法

event解決了組建之間各種層級關係的通信問題

主要概念就是在Vue的原型上面添加一個$bus變量是可以使用Vue原型上的方法$emit與$on的實例,

所以可以使用new Vue弄出新的Vue實例,或是Vue.extend組件實例,或是在beforeCreate中把自己實例弄到原型上。

定義

# main.js
import Vue from 'vue'
import App from './App.vue'
//寫法一 添加一個新的Vue實例
Vue.prototype.$bus = new Vue()
//寫法二 添加一個新的組件實例
const Bus = Vue.extend()
Vue.proptotype.$bus = new Bus
new Vue({
	el:'#app',
	render:h=>h(App),
	//寫法三
	beforeCreate(){
		Vue.prototype.$bus = this //添加當前的實例
	}
})

使用

在任何組件下都可以使用

this.$bus.$on() //監聽事件
this.$bus.$emit() //觸發監聽的事件並且傳值

注意

通常在組建銷毀的時候記得要消除$bus上的當前組件上的監聽

beforeDestroy(){
	this.$bus.$off(name)
}

若是A組件想接收數據,則在A組件中給$bus綁定事件,事件的回調使用A組建本身的函式this就會正確不然就是使用箭頭函示就可以直接定義在$on上面,不然this會是綁定的實例對象。