Vue-EventBus心得

Case 1:

1、新建event.js文件,初始化

// event-bus.js
importVuefrom 'vue'
exportconstEventBus = newVue()

2、在發(fā)送以及接收的組件中都引入此 event.js

import {
    EventBus
}from "../event-bus.js";

3、發(fā)送組件加入代碼

EventBus.$emit("hello", this.number);

4、接收組件加入代碼

EventBus.$on("hello", (number) = > {
    console.log(number)
});

Case 2:

直接在項目中的main.js初始化EventBus,具體發(fā)送、接收,同上Case1

// main.js
Vue.prototype.$EventBus = new Vue()

Case3:

解釋說明:中央事件總線bus,其作為一個簡單的組件傳遞事件,用于解決跨級和兄弟組件通信的問題,將其封裝為一個Vue的插件,那么就可以在組件之間使用,而不需要導(dǎo)入bus

1、新建目錄vue-bus,在目錄里新建vue-bus.js文件,具體代碼如下:

//vue-bus.js
const install = function(Vue) {
    const Bus = new Vue({
        methods: {
            emit(event, ...args) {
                this.$emit(event, ...args);
            },
            on(event, callback) {
                this.$on(event, callback);
            },
            off(event, callback) {
                this.$off(event, callback);
            }
        }
    });
    Vue.prototype.$bus = Bus;
};
export default install;

注:emit(event,...args)中的...args是函數(shù)參數(shù)的解構(gòu),因為不知道組件會傳遞多少個參數(shù)進(jìn)來,使用...args可以把當(dāng)前參數(shù)到最后的參數(shù)全部獲取到。

2、在main.js中使用插件:

//main.js
import VueBus from './vue-bus/vue-bus';
Vue.use(VueBus);

3、發(fā)送組件加入代碼

this.$bus.emit('hello',this.number,this.number2);

4、接收組件加入代碼

this.$bus.on('hello', (number, number2) = > {
    console.log(number)
    console.log(number2)
})

綜上所述,對于Case3的方式,通過插件的形式使用后,所有的組件都可以直接使用$bus,不需要每一個組件都導(dǎo)入bus組件。

有兩點需要注意:
1、$bus.on應(yīng)該在created鉤子內(nèi)使用,如果在mounted使用,有可能接收不到其他組件來自created鉤子內(nèi)發(fā)出的事件。

2、使用了$bus.on,在beforeDestroy鉤子里應(yīng)該再使用$bus.off解除,因為組件銷毀后,沒有必要把監(jiān)聽句柄存儲在vue-bus里了。

beforeDestroy() {
    this.$bus.off('hello', something);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • vue-cli搭建項目 確保安裝了node與npm 再目標(biāo)文件夾下打開終端 執(zhí)行cnpm i vue-cli -g...
    Akiko_秋子閱讀 3,364評論 1 22
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,373評論 0 6
  • 主要還是自己看的,所有內(nèi)容來自官方文檔。 介紹 Vue.js 是什么 Vue (讀音 /vju?/,類似于 vie...
    Leonzai閱讀 3,540評論 0 25
  • 渲染函數(shù)和jsx 在vue中我們可以不用template來指定組件的模板,而是用render函數(shù)來創(chuàng)建虛擬dom結(jié)...
    6e5e50574d74閱讀 773評論 0 0
  • 最后一次見你 那天下著小雨 我撐著小綠傘 你從我身邊走過 就是那一瞬間 我們又一次呼吸了同一片空氣 你慢慢的向前走...
    薇薇抽閱讀 238評論 0 1

友情鏈接更多精彩內(nèi)容