Vue組件通信之Bus的具體使用
關(guān)于組件通信我相信小伙伴們肯定也都很熟悉,就不多說了,對組件通信還不熟悉的小伙伴移步這里。
在vue2.0中 $dispatch 和 $broadcast 已經(jīng)被棄用。官方文檔中給出的解釋是:
因為基于組件樹結(jié)構(gòu)的事件流方式實在是讓人難以理解,并且在組件結(jié)構(gòu)擴展的過程中會變得越來越脆弱。這種事件方式確實不太好,我們也不希望在以后讓開發(fā)者們太痛苦。并且$dispatch 和 $broadcast 也沒有解決兄弟組件間的通信問題。
官方推薦的狀態(tài)管理方案是 Vuex。不過如果項目不是很大,狀態(tài)管理也沒有很復(fù)雜的話,使用 Vuex 有種殺雞用牛刀的感覺,當然,這也是要根據(jù)自己的需求來的,只是建議。
vue官方文檔中有這樣一個定義:非父子組件的通信,內(nèi)容很少,如下:

其實關(guān)于這個非父子組件通信的demo還是有的,它藏在了$dispatch 和 $broadcast的遷移文檔中,有興趣的小伙伴可以點擊進去查看。文檔中的建議就是:
對于$dispatch 和 $broadcast最簡單的升級方式就是:通過使用事件中心,允許組件自由交流,無論組件處于組件樹的哪一層。由于 Vue 實例實現(xiàn)了一個事件分發(fā)接口,你可以通過實例化一個空的 Vue 實例來實現(xiàn)這個目的。
這個集中式的事件中間件就是 Bus。我習慣將bus定義到全局:
app.js
var eventBus = {
install(Vue,options) {
Vue.prototype.$bus = vue
}
};
Vue.use(eventBus);
然后在組件中,可以使用$emit, $on, $off 分別來分發(fā)、監(jiān)聽、取消監(jiān)聽事件:
分發(fā)事件的組件
// ...
methods: {
todo: function () {
this.$bus.$emit('todoSth', params); //params是傳遞的參數(shù)
//...
}
}
監(jiān)聽的組件
// ...
created() {
this.$bus.$on('todoSth', (params) => { //獲取傳遞的參數(shù)并進行操作
//todo something
})
},
// 最好在組件銷毀前
// 清除事件監(jiān)聽
beforeDestroy () {
this.$bus.$off('todoSth');
},
如果需要監(jiān)聽多個組件,只需要更改 bus 的 eventName:
// ...
created() {
this.$bus.$on('firstTodo', this.firstTodo);
this.$bus.$on('secondTodo', this.secondTodo);
},
// 清除事件監(jiān)聽
beforeDestroy () {
this.$bus.$off('firstTodo', this.firstTodo);
this.$bus.$off('secondTodo', this.secondTodo);
},
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue-cli解決IE瀏覽器sockjs-client錯誤方法
這篇文章主要為大家介紹了vue-cli解決IE瀏覽器sockjs-client錯誤方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
vue forEach循環(huán)數(shù)組拿到自己想要的數(shù)據(jù)方法
今天小編就為大家分享一篇vue forEach循環(huán)數(shù)組拿到自己想要的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
解決antd的Form組件setFieldsValue的警告問題
這篇文章主要介紹了解決antd的Form組件setFieldsValue的警告問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
解決vue2.0路由跳轉(zhuǎn)未匹配相應(yīng)用路由避免出現(xiàn)空白頁面的問題
今天小編就為大家分享一篇解決vue2.0路由跳轉(zhuǎn)未匹配相應(yīng)用路由避免出現(xiàn)空白頁面的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
vue項目如何使用three.js實現(xiàn)vr360度全景圖片預(yù)覽
這篇文章主要介紹了vue項目如何使用three.js實現(xiàn)vr360度全景圖片預(yù)覽,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03

