亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue中事件總線(eventBus)的深入詳解及使用

 更新時間:2022年03月07日 14:16:22   作者:明天也要努力  
在vue項目中父子組件間的通訊很方便,但兄弟組件或多層嵌套組件間的通訊,就會比較麻煩,這時使用eventBus通訊,就可以很便捷的解決這個問題,這篇文章主要給大家介紹了關(guān)于Vue中事件總線(eventBus)使用的相關(guān)資料,需要的朋友可以參考下

1. 簡介

Vue 組件中常見的有:父子組件通信、兄弟組件通信。而父子組件通信就很簡單,父組件會通過 props 向下傳數(shù)據(jù)給子組件,當(dāng)子組件有事情要告訴父組件時會通過 $emit 事件告訴父組件。

今天就來說說,如果兩個頁面沒有任何引入和被引入關(guān)系,該如何通信呢?

如果應(yīng)用程序不需要類似 Vuex 這樣的庫來處理組件之間的數(shù)據(jù)通信,就可以考慮 Vue 中的事件總線 ,即 eventBus 來通信。

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

2. 使用

可以聲明一個全局變量來使用事件中心,但如果在使用 webpack 之類的模塊系統(tǒng),這顯然不合適。
每次使用都手動 import 進來也很不方便,所以本文使用 vue-bus 插件。

vue-bus npm地址

vue-bus github地址

安裝及引入

npm install vue-bus --save

如果在一個模塊化工程中使用它,必須要通過 Vue.use() 明確地安裝 vue-bus:

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

在組件中使用

假設(shè)有兩個Vue組件需要通信 ,在 A 組件的按鈕上面綁定了點擊事件發(fā)送一則消息,想通知 B 組件。

// A 組件
<template>
  <div class="wrap">
    <button @click="sendMsg">觸發(fā)</button>
  </div>
</template>

<script>
export default {
  data(){
    return {
      Amsg:'我是來自A組件的信息',
    }
  },
  methods:{
    sendMsg(){
      this.$bus.emit('changeMsg', this.Amsg );
      this.$bus.emit('doOnce','我只會觸發(fā)一次');
    }
  },
}
</script>
// B 組件
<template>
  <div>
    <h3>{{Bmsg}}</h3>
  </div>
</template>

<script>
export default {
  data(){
    return {
      Bmsg:'我是B組件',
    }
  },
  methods:{
    getMsg(msg){
      this.Bmsg = msg;
      console.log(msg);
    }
  },
  created(){
    /*
    * 接收事件
    * 這種寫法也體現(xiàn)了:A 組件調(diào)用 B 組件中的方法。如果只是傳遞數(shù)據(jù),可參考如下簡化寫法:
    * this.$bus.on('changeMsg', (msg) => { this.Bmsg = msg });
	*/ 
    this.$bus.on('changeMsg', this.getMsg);
    // 此偵聽器只會觸發(fā)一次
    this.$bus.once('doOnce', (txt) => { console.log(txt) });
  },
  // 組件銷毀時,移除EventBus事件監(jiān)聽
  beforeDestroy() {
    this.$bus.off('changeMsg', this.addTodo);
  },
}
</script>

當(dāng)我們點擊5次觸發(fā)按鈕時,效果如下:

補充:移除監(jiān)聽事件

為了避免在監(jiān)聽時,事件被反復(fù)觸發(fā),通常需要在頁面銷毀時移除事件監(jiān)聽?;蛘咴陂_發(fā)過程中,由于熱更新,事件可能會被多次綁定監(jiān)聽,這時也需要移除事件監(jiān)聽。

//使用方式一定義時
this.$EventBus.$off('eventName');
//使用方式二定義時
EventBus.$off('eventName');

總結(jié)

eventBus 適合小項目、數(shù)據(jù)被更少組件使用的項目,對于中大型項目數(shù)據(jù)在很多組件之間使用的情況 eventBus 就不太適用了。eventBus 其實就是一個發(fā)布訂閱模式,利用 Vue 的自定義事件機制,在觸發(fā)的地方通過 $emit 向外發(fā)布一個事件,在需要監(jiān)聽的頁面,通過 $on 監(jiān)聽事件。

 

相關(guān)文章

  • Vue3源碼通過render?patch?了解diff

    Vue3源碼通過render?patch?了解diff

    這篇文章主要為大家介紹了Vue3源碼系列通過render及patch了解diff原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Vuex實現(xiàn)購物車小功能

    Vuex實現(xiàn)購物車小功能

    這篇文章主要為大家詳細介紹了Vuex實現(xiàn)購物車小功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • el-table表頭全選框隱藏或禁用設(shè)置方法

    el-table表頭全選框隱藏或禁用設(shè)置方法

    有時候我們使用el-table的選擇框時,如果涉及修改、刪除時,可能一次只允許用戶選擇一條,這樣的話如果使用頂部的全選復(fù)選框就不合適了,這篇文章主要給大家介紹了關(guān)于el-table表頭全選框隱藏或禁用設(shè)置的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • 解決VUE的對話框el-dialog點擊外部消失問題

    解決VUE的對話框el-dialog點擊外部消失問題

    這篇文章主要介紹了解決VUE的對話框el-dialog點擊外部消失問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • VUE中V-IF條件判斷改變元素的樣式操作

    VUE中V-IF條件判斷改變元素的樣式操作

    這篇文章主要介紹了VUE中V-IF條件判斷改變元素的樣式操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨想過來看看吧
    2020-08-08
  • vue3實現(xiàn)H5表單驗證組件的示例

    vue3實現(xiàn)H5表單驗證組件的示例

    本文主要介紹了vue3實現(xiàn)H5表單驗證組件的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • VSCode插件安裝完成后的配置(常用配置)

    VSCode插件安裝完成后的配置(常用配置)

    這篇文章主要介紹了VSCode插件安裝完成后的配置,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • vueCli4如何配置vue.config.js文件

    vueCli4如何配置vue.config.js文件

    這篇文章主要介紹了vueCli4如何配置vue.config.js文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Vue3 axios配置以及cookie的使用方法實例演示

    Vue3 axios配置以及cookie的使用方法實例演示

    這篇文章主要介紹了Vue3 axios配置以及cookie的使用方法,需要的朋友可以參考下
    2023-02-02
  • Vue組件實現(xiàn)評論區(qū)功能

    Vue組件實現(xiàn)評論區(qū)功能

    這篇文章主要為大家詳細介紹了Vue組件實現(xiàn)評論區(qū)功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論