Vue2中如何使用全局事件總線實(shí)現(xiàn)任意組件間通信
前言:
vue 中組件間通信的方式有很多 ------ 父傳子propos,全局事件總線,消息訂閱,vuex......等等,這篇文章帶大家學(xué)習(xí)一下通過全局事件總線來實(shí)現(xiàn)任意組件間的通信。
一:什么是全局事件總線
全局事件總線 其實(shí)就是一個(gè)中間人,組件與組件之間的通信需要借助于這個(gè)中間人,在一個(gè)組件中向其綁定自定義事件,然后在另一個(gè)組件觸發(fā)向全局事件總線中綁定的這個(gè)自定義事件并傳遞值,進(jìn)而實(shí)現(xiàn)通信。我們可以通過下面的一個(gè)圖來粗略解釋什么是全局事件總線
組件C向組件A傳遞數(shù)據(jù):
- 首先組件A向全局事件總線綁定另一個(gè)自定義事件,并定義了當(dāng)這個(gè)事件do被觸發(fā)時(shí)要執(zhí)行的回調(diào)函數(shù)
- 然后由組件C去觸發(fā)全局事件總線中的自定義事件do,并向其回調(diào)中傳遞數(shù)據(jù)
- 這樣就實(shí)現(xiàn)了組件C去觸發(fā)事件并傳遞數(shù)據(jù),組件A去定義事件并接受數(shù)據(jù)
二:全局事件總線怎么創(chuàng)建
上一版塊我們知道了全局事件總線就是一個(gè)處于任何組件都訪問得到的中間媒介,既然要讓所有組件都訪問得到,那我們就要轉(zhuǎn)換思路,即讓 vc 或者 vm 訪問得到:
在 vue 文件的 main.js 入口函數(shù)中的 beforeCreate 鉤子中創(chuàng)建:
$bus 就是我們的全局事件總線,其定義并賦值后就是 vm,可以訪問 vue 原型對(duì)中的所有方法,這就包含了綁定的方法 $on,觸發(fā)的方法 $emit,解綁的方法 $off
new Vue({ el:'#app', render: h => h(App), //定義全局事件總線 $bus beforeCreate:function(){ Vue.prototype.$bus=this; } })
三:綁定自定義事件
創(chuàng)建過全局事件總線后,就可以開始綁定自定義事件了,使用 $on 綁定自定義事件,綁定要寫在 mounted 鉤子中,后面為其觸發(fā)時(shí)執(zhí)行的回調(diào)。
//A組件 export default { name:'componentA', data() { return {} }, mounted(){ this.$bus.$on('do',(data)=>{ //為全局事件總線綁定自定義事件do console.log('我收到了B組件傳來的姓名:',data); }) } }
四:觸發(fā)自定義事件
綁定過后就可以在另一個(gè)組件中觸發(fā)了,觸發(fā)使用的是 $emit,觸發(fā)并將后面的值傳給自定義事件被觸發(fā)時(shí)執(zhí)行的回調(diào)
//組件B export default { name:'componentB', data() { return { name:'張三' } }, methods:{ get:function(){ //在該組件的模板中添加一個(gè)按鈕點(diǎn)擊執(zhí)行該函數(shù) get this.$bus.$emit('do',this.name) //觸發(fā)自定義事件do }, } }
成功實(shí)現(xiàn)任意組件間傳遞數(shù)據(jù)
五:解綁自定義事件
vue 實(shí)例總將被銷毀,那么我們就要在實(shí)例銷毀前解綁自定義事件,這就要和綁定自定義事件同級(jí)書寫,即寫在 beforeDestroy 鉤子中,使用 $off 解綁
//A組件 export default { name:'componentA', data() { return {} }, mounted(){ this.$bus.$on('do',(data)=>{ //為全局事件總線綁定自定義事件do console.log('我收到了B組件傳來的姓名:',data); }) }, beforeDestroy(){ this.$bus.$off('do') //解綁自定義事件do } }
總結(jié)
到此這篇關(guān)于Vue2中如何使用全局事件總線實(shí)現(xiàn)任意組件間通信的文章就介紹到這了,更多相關(guān)Vue2任意組件間通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue Echarts實(shí)現(xiàn)可視化世界地圖代碼實(shí)例
這篇文章主要介紹了Vue Echarts實(shí)現(xiàn)可視化世界地圖,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05解決vue單頁路由跳轉(zhuǎn)后scrollTop的問題
今天小編就為大家分享一篇解決vue單頁路由跳轉(zhuǎn)后scrollTop的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09vue3.0 CLI - 2.3 - 組件 home.vue 中學(xué)習(xí)指令和綁定
這篇文章主要介紹了vue3.0 CLI - 2.3 - 組件 home.vue 中學(xué)習(xí)指令和綁定的相關(guān)知識(shí),本文通過實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì) ,需要的朋友可以參考下2018-09-09vue腳手架創(chuàng)建項(xiàng)目時(shí)報(bào)catch錯(cuò)誤及解決
這篇文章主要介紹了vue腳手架創(chuàng)建項(xiàng)目時(shí)報(bào)catch錯(cuò)誤及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01vue使用recorder-core.js實(shí)現(xiàn)錄音功能
這篇文章主要介紹了vue如何使用recorder-core.js實(shí)現(xiàn)錄音功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Vue-input框checkbox強(qiáng)制刷新問題
這篇文章主要介紹了Vue-input框checkbox強(qiáng)制刷新問題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04vue 需求 data中的數(shù)據(jù)之間的調(diào)用操作
這篇文章主要介紹了vue 需求 data中的數(shù)據(jù)之間的調(diào)用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08vue3+Element采用遞歸調(diào)用封裝導(dǎo)航欄實(shí)現(xiàn)
本文主要介紹了vue3+Element采用遞歸調(diào)用封裝導(dǎo)航欄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06