日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Vue组件通信之Bus

發布時間:2023/12/15 综合教程 40 生活家
生活随笔 收集整理的這篇文章主要介紹了 Vue组件通信之Bus 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于組件通信我相信小伙伴們肯定也都很熟悉,就不多說了,對組件通信還不熟悉的小伙伴移步這里。
在vue2.0中 $dispatch 和 $broadcast 已經被棄用。官方文檔中給出的解釋是:

因為基于組件樹結構的事件流方式實在是讓人難以理解,并且在組件結構擴展的過程中會變得越來越脆弱。這種事件方式確實不太好,我們也不希望在以后讓開發者們太痛苦。并且$dispatch 和 $broadcast 也沒有解決兄弟組件間的通信問題。

官方推薦的狀態管理方案是 Vuex。不過如果項目不是很大,狀態管理也沒有很復雜的話,使用 Vuex 有種殺雞用牛刀的感覺,當然,這也是要根據自己的需求來的,只是建議。

vue官方文檔中有這樣一個定義:非父子組件的通信,內容很少,如下:

其實關于這個非父子組件通信的demo還是有的,它藏在了$dispatch 和 $broadcast的遷移文檔中,有興趣的小伙伴可以點擊進去查看。文檔中的建議就是:

對于$dispatch 和 $broadcast最簡單的升級方式就是:通過使用事件中心,允許組件自由交流,無論組件處于組件樹的哪一層。由于 Vue 實例實現了一個事件分發接口,你可以通過實例化一個空的 Vue 實例來實現這個目的。

這個集中式的事件中間件就是 Bus。我習慣將bus定義到全局:

app.js


var eventBus = {
    install(Vue,options) {
        Vue.prototype.$bus = vue
    }
};
Vue.use(eventBus);

然后在組件中,可以使用$emit, $on, $off 分別來分發、監聽、取消監聽事件:

分發事件的組件


// ...
methods: {
  todo: function () {
    this.$bus.$emit('todoSth', params);  //params是傳遞的參數
    //...
  }
}

監聽的組件


// ...
created() {
  this.$bus.$on('todoSth', (params) => {  //獲取傳遞的參數并進行操作
      //todo something
  })
},
// 最好在組件銷毀前
// 清除事件監聽
beforeDestroy () {
  this.$bus.$off('todoSth');
},

如果需要監聽多個組件,只需要更改 buseventName:


// ...
created() {
  this.$bus.$on('firstTodo', this.firstTodo);
  this.$bus.$on('secondTodo', this.secondTodo);
},
// 清除事件監聽
beforeDestroy () {
  this.$bus.$off('firstTodo', this.firstTodo);
  this.$bus.$off('secondTodo', this.secondTodo);
},

如果文章有錯誤或是有什么疑問,歡迎在評論中交流。

原文地址:https://segmentfault.com/a/1190000012607362

總結

以上是生活随笔為你收集整理的Vue组件通信之Bus的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。