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

      歡迎訪問 生活随笔!

      生活随笔

      當前位置: 首頁 > 前端技术 > vue >内容正文

      vue

      vue 事件总线EventBus的概念、使用以及注意点

      發布時間:2025/3/21 vue 62 豆豆
      生活随笔 收集整理的這篇文章主要介紹了 vue 事件总线EventBus的概念、使用以及注意点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

      vue組件中的數據傳遞最最常見的就是父子組件之間的傳遞。父傳子通過props向下傳遞數據給子組件;子傳父通過$emit發送事件,并攜帶數據給父組件。而有時兩個組件之間毫無關系,或者他們之間的結構復雜,如何傳遞數據呢?這時就要用到 vue 中的事件總線 EventBus的概念

      EventBus的簡介

      EventBus又稱事件總線,相當于一個全局的倉庫,任何組件都可以去這個倉庫里獲取事件

      EventBus的使用

      廢話不多說,直接開始使用EventBus

      一、初始化

      要用EventBus,首先要初始化一個EventBus,這里稱它為全局事件總線。

      -第一種初始化方法

      import Vue from 'vue' //因為是全局的一個'倉庫',所以初始化要在全局初始化 const EventBus = new Vue()

      -第二種初始化方法(本文選用這種初始化方法)

      //在已經創建好的Vue實例原型中創建一個EventBus Vue.prototype.$EventBus = new Vue()

      二、向EventBus發送事件

      發送事件的語法:this.$EventBus.$emit(發送的事件名,傳遞的參數)

      已經創建好EventBus后我們就需要向它發送需要傳遞的事件,以便其他組件可以向EventBus獲取

      例子:有兩個組件A和B需要通信,他們不是父子組件關系,B事件需要獲得A事件里的一組數據data

      <!-- A.vue 這里是以模塊化的方式講解的,即A組件和B組件分別各自 一個.vue文件,所以代碼中會有導入的語法--><template><button @click="sendMsg">發送MsgA</button> </template><script> export default {data(){return{MsgA: 'A組件中的Msg'}},methods: {sendMsg() {/*調用全局Vue實例中的$EventBus事件總線中的$emit屬性,發送事件"aMsg",并攜帶A組件中的Msg*/this.$EventBus.$emit("aMsg", this.MsgA);}} }; </script>

      三、接收事件

      接收事件的語法:this.$EventBus.$on(監聽的事件名, 回調函數)
      A組件已經向全局事件總線EventBus發送了一個aMsg事件,這時B組件就可以去aMsg監聽這個事件,并可以獲得一些數據。

      <!-- B.vue --><template><!-- 展示msgB --><p>{{msgB}}</p></template><script> export default {data(){return {//初始化一個msgBmsgB: ''}},mounted() {/*調用全局Vue實例中的$EventBus事件總線中的$on屬性,監聽A組件發送到事件總線中的aMsg事件*/this.$EventBus.$on("aMsg", (data) => {//將A組件傳遞過來的參數data賦值給msgBthis.msgB = data;});} }; </script>

      B組件展示結果:

      A組件中的Msg
      這樣,B組件就輕松接收到了A組件傳遞過來的參數,并成功展示了該參數,這樣是不是就很簡單的解決了各組件之間的通訊呢?雖然EventBus是一個很輕便的方法,任何數據都可以往里傳,然后被別的組件獲取,但是如果用不好,容易出現很嚴重的BUG,所以接下來我們就來講解一下移除監聽事件。

      四、移除監聽事件

      在上一個例子中,我們A組件向事件總線發送了一個事件aMsg并傳遞了參數MsgA,然后B組件對該事件進行了監聽,并獲取了傳遞過來的參數。但是,這時如果我們離開B組件,然后再次進入B組件時,又會觸發一次對事件aMsg的監聽,這時時間總線里就有兩個監聽了,如果反復進入B組件多次,那么就會對aMsg進行多次的監聽。

      總而言之,A組件只向EventBus發送了一次事件,但B組件卻進行了多次監聽,EventBus容器中有很多個一模一樣的事件監聽器這時就會出現,事件只觸發一次,但監聽事件中的回調函數執行了很多次

      1.解決辦法:在組件離開,也就是被銷毀前,將該監聽事件給移除,以免下次再重復創建監聽
      2.語法:this.$EventBus.$off(要移除監聽的事件名)

      <!-- B.vue --><template><!-- 展示msgB --><p>{{msgB}}</p></template><script> export default {data(){return {//初始化一個msgBmsgB: ''}},mounted() {/*調用全局Vue實例中的$EventBus事件總線中的$on屬性,監聽A組件發送到事件總線中的aMsg事件*/this.$EventBus.$on("aMsg", (data) => {//將A組件傳遞過來的參數data賦值給msgBthis.msgB = data;});},beforeDestroy(){//移除監聽事件"aMsg"this.$EventBus.$off("aMsg")} }; </script>

      總結

      以上是生活随笔為你收集整理的vue 事件总线EventBus的概念、使用以及注意点的全部內容,希望文章能夠幫你解決所遇到的問題。

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

      主站蜘蛛池模板: 日韩精品久久久久久 | 九九热综合 | 在线视频1卡二卡三卡 | 日本一区二区久久 | 日日爽夜夜操 | 91一区二区在线观看 | 欧美人体做爰大胆视频 | 国产人妻人伦精品1国产丝袜 | 日韩欧美高清视频 | 亚洲aaaa级特黄毛片 | 毛片123| 亚洲精品无吗 | 风间由美一区二区三区 | 午夜播放 | av电影在线观看网址 | 欧美 亚洲 另类 激情 另类 | 91丝袜一区在线观看 | 久久久久久久久综合 | 妻色成人网 | 黄网站在线观看视频 | 午夜精品国产精品大乳美女 | a一级网站 | 欧美精品啪啪 | 91视频www| 欧美一级高清片 | 特黄特色大片免费视频大全 | 国产精品亚洲第一 | 欧美日韩亚洲国产另类 | 久久久精品 | 免费在线观看黄色网址 | 少女忠诚电影高清免费 | 亚洲黄色在线视频 | 国产精品一区无码 | 日本高清有码 | 成人乱码一区二区三区av | 国产盗摄精品一区二区酒店 | 国产精品无码中文字幕 | 天天干天天操心 | 天堂av在线免费观看 | 欧美日韩在线免费看 | 韩国黄色网址 | 老子午夜影院 | av先锋资源| 欧美精品一区二区三区在线播放 | 97se综合 | 欧美影院| 免费观看成年人网站 | 一区二区三区小说 | 亚洲天堂一级片 | 久久天堂精品 | 国产精品婷婷午夜在线观看 | 穿越异世荒淫h啪肉np文 | 极品蜜桃臀肥臀-x88av | 麻豆一区产品精品蜜桃的特点 | 亚洲图片欧美在线 | 欧美日韩在线一区二区三区 | 麻豆爱爱视频 | 久久草精品 | 国产毛片a级| 国产精品成人免费一区久久羞羞 | 亚洲在线视频 | 潘金莲激情呻吟欲求不满视频 | 免费视频亚洲 | 怡红院亚洲 | 日韩性生活视频 | 韩国三级hd中文字幕 | 激情av在线 | 久久sese| 毛片毛片毛片毛片毛片毛片毛片 | 国产精品视频a | 欧美色图亚洲天堂 | av看片在线 | 暧暧视频在线观看 | 在线免费观看成年人视频 | 中文字幕不卡在线观看 | 91视频 - 8mav| 亚洲一区二区自拍偷拍 | 免费网站在线观看人数在哪动漫 | 人妻无码一区二区三区 | 性久久久 | 国产在线v | 国产精品久久精品 | ,一级淫片a看免费 | 国产精品一二三区在线观看 | 麻豆av网站 | 麻豆视频一区 | 91国产视频在线播放 | 午夜国产一区二区 | 沈樵精品国产成av片 | 亚洲爱爱片 | 色猫咪av| 小sao货水好多真紧h无码视频 | 一本一道久久a久久 | 五月天校园春色 | 久久婷婷网 | 欧美精品性视频 | 少妇真人直播免费视频 | 成人做受视频试看60秒 | 91在线免费视频观看 |