VUE - EventBus

  • vue組件非常常見的有父子組件通信鸥鹉,兄弟組件通信撑帖。而父子組件通信就很簡單筐眷,父組件會通過 props 向下傳數(shù)據(jù)給子組件铐炫,當子組件有事情要告訴父組件時會通過 $emit 事件告訴父組件垒手。今天就來說說如果兩個頁面沒有任何引入和被引入關系,該如何通信倒信?

  • 如果咱們的應用程序不需要類似Vuex這樣的庫來處理組件之間的數(shù)據(jù)通信科贬,就可以考慮Vue中的 事件總線 ,即 EventBus來通信鳖悠。

  • EventBus 又稱為事件總線榜掌。在Vue中可以使用 EventBus 來作為溝通橋梁的概念,就像是所有組件共用相同的事件中心乘综,可以向該中心注冊發(fā)送事件或接收事件唐责,所以組件都可以上下平行地通知其他組件,但也就是太方便所以若使用不慎瘾带,就會造成難以維護的“災難”鼠哥,因此才需要更完善的Vuex作為狀態(tài)管理中心,將通知的概念上升到共享狀態(tài)層次看政。

  • 前面提到過朴恳,如果使用不善,EventBus會是一種災難允蚣,到底是什么樣的“災難”了于颖?大家都知道vue是單頁應用,如果你在某一個頁面刷新了之后嚷兔,與之相關的EventBus會被移除森渐,這樣就導致業(yè)務走不下去。還有就是如果業(yè)務有反復操作的頁面冒晰,EventBus在監(jiān)聽的時候就會觸發(fā)很多次同衣,也是一個非常大的隱患。這時候我們就需要好好處理EventBus在項目中的關系壶运。通常會用到耐齐,在vue頁面銷毀時,同時移除EventBus事件監(jiān)聽。

初始化

  • 首先需要創(chuàng)建事件總線并將其導出埠况,以便其它模塊可以使用或者監(jiān)聽它耸携。我們可以通過兩種方式來處理。先來看第一種辕翰,新創(chuàng)建一個 .js 文件夺衍,比如 event-bus.js
// event-bus.js
import Vue from 'vue'
export const EventBus = new Vue()
  • 實質(zhì)上EventBus是一個不具備 DOM 的組件,它具有的僅僅只是它實例方法而已喜命,因此它非常的輕便沟沙。

  • 另外一種方式,可以直接在項目中的 main.js 初始化 EventBus :

// main.js
Vue.prototype.$EventBus = new Vue()
  • 注意渊抄,這種方式初始化的EventBus是一個全局的事件總線尝胆。用法基本一樣,全局的不用引入event-bus.js护桦,只需this.$EventBus就可以調(diào)用$emit含衔、$on、$off等方法二庵。

  • 現(xiàn)在我們已經(jīng)創(chuàng)建了 EventBus 贪染,接下來你需要做到的就是在你的組件中加載它,并且調(diào)用同一個方法催享,就如你在父子組件中互相傳遞消息一樣杭隙。

// 發(fā)送消息
EventBus.$emit(channel: string, callback(payload1,…))

// 監(jiān)聽接收消息
EventBus.$on(channel: string, callback(payload1,…))

// 移除事件的監(jiān)聽
EventBus.$off('aMsg')

// 移除所有事件的監(jiān)聽
EventBus.$off()

實例:

// eventBus.js
import Vue from 'vue';
export const eventBus = new Vue();
// CptA.vue
<template>
    <div>
        <button @click="btn">btn</button>
    </div>
</template>

<script>
    import {eventBus} from "../utils/eventBus";

    export default {
        name: "CptA",
        methods: {
            btn() {
                eventBus.$emit('aMsg', '我來自CptA')
            }
        },
    }
</script>
// CptB.vue
<template>
    <div>{{msg}}</div>
</template>

<script>
    import {eventBus} from "../utils/eventBus";

    export default {
        name: "PageA",
        data() {
            return {
                msg: 'value'
            }
        },
        mounted() {
            eventBus.$on('aMsg', mm => {
                this.msg = mm;
                console.log(mm)
            })
        }
    }
</script>

組件之間使用this.$bus.$on傳值之前需要先this.$bus.$off注銷事件,否則會導致多次監(jiān)聽問題
this.$bus.$off('toOrder').$on('toOrder', this.updateAddress)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末因妙,一起剝皮案震驚了整個濱河市痰憎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攀涵,老刑警劉巖铣耘,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異以故,居然都是意外死亡蜗细,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門怒详,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炉媒,“玉大人,你說我怎么就攤上這事昆烁〉踔瑁” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵善玫,是天一觀的道長水援。 經(jīng)常有香客問我密强,道長茅郎,這世上最難降的妖魔是什么蜗元? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮系冗,結果婚禮上奕扣,老公的妹妹穿的比我還像新娘。我一直安慰自己掌敬,他們只是感情好惯豆,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奔害,像睡著了一般楷兽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上华临,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天芯杀,我揣著相機與錄音,去河邊找鬼雅潭。 笑死揭厚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的扶供。 我是一名探鬼主播筛圆,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼椿浓!你這毒婦竟也來了太援?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扳碍,失蹤者是張志新(化名)和其女友劉穎提岔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體左腔,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡唧垦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了液样。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片振亮。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鞭莽,靈堂內(nèi)的尸體忽然破棺而出坊秸,到底是詐尸還是另有隱情,我是刑警寧澤澎怒,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布褒搔,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏星瘾。R本人自食惡果不足惜走孽,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琳状。 院中可真熱鬧磕瓷,春花似錦、人聲如沸念逞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翎承。三九已至硕盹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叨咖,已是汗流浹背瘩例。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芒澜,地道東北人仰剿。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像痴晦,于是被迫代替她去往敵國和親南吮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容