日韩性视频-久久久蜜桃-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的概念、使用以及注意点的全部內容,希望文章能夠幫你解決所遇到的問題。

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

      主站蜘蛛池模板: 一区二区三区不卡视频在线观看 | 聚色屋 | 很嫩很紧直喷白浆h | 高潮流白浆在线观看 | 男生和女生一起差差差很痛的视频 | 特黄视频在线观看 | 欧美日韩v | 亚洲综合色网站 | 蜜桃传媒| 国产综合视频一区二区 | 国产夫妻久久 | 色婷婷久久久亚洲一区二区三区 | 亚洲成人福利 | 国产三级观看 | 国产做受高潮漫动 | 伊人亚洲影院 | 欧美性猛片aaaaaaa做受 | 一级黄网站 | 岛国精品资源网站 | 性欧美videos另类艳妇3d | 超碰中文字幕 | 91丨九色丨丰满人妖 | 日韩一级免费观看 | 中文字幕国产一区二区 | 极品美女销魂一区二区三区 | 2018国产大陆天天弄 | www 在线观看视频 | 亚洲自拍三区 | 高清中文字幕在线a片 | 黄色激情视频网站 | 肉丝美脚视频一区二区 | 91成人免费观看 | 亚洲精品一级二级 | 天天色天天操天天射 | 欧美在线一区二区视频 | 成人一级视频在线观看 | 在线亚洲一区 | 二区视频在线观看 | 久久综合激情网 | 亚洲一区二区观看播放 | 黄色理论视频 | 欧美级毛片 | 在线观看免费黄色小视频 | 欧美第一页在线 | 欧美激情第五页 | 中文字幕最新 | 欧美日韩系列 | www黄色av| 黄色资源在线 | 中文字幕亚洲视频 | 97超碰在线免费 | 欧美激情综合五月色丁香 | 山村淫强伦寡妇 | 国产精品国产三级国产普通话蜜臀 | 在线观看麻豆av | av网在线观看 | 免费黄色网页 | 久久爱网 | 国产免费一区 | 最近中文字幕无免费 | 双性人bbww欧美双性 | 国产探花精品一区二区 | 亚洲最新在线视频 | 中字幕视频在线永久在线观看免费 | 在线观看jizz | 黑丝美女一区二区 | 丰满少妇一区二区三区 | 色呦呦一区二区三区 | 色婷婷网 | 国产高潮视频 | 天天摸夜夜添狠狠添婷婷 | 日韩在线观看免费av | 丝袜 亚洲 另类 国产 制服 | 日本xxxx人| 亚洲天堂视频在线播放 | 欧美女人天堂 | 日本午夜影院 | 91美女诱惑 | 婷婷激情五月网 | 少妇精品视频一区二区 | 麻豆视频免费在线观看 | 日韩精品免费一区二区在线观看 | 欧美成综合 | 不卡视频在线观看 | 狠狠艹狠狠干 | av手机免费观看 | 永久久久久久久 | 久久久青青 | 办公室荡乳欲伦交换bd电影 | 久久精品成人一区二区三区蜜臀 | 久久久综合久久久 | 久久久久久久久久久久久女国产乱 | 国产精品无码中文字幕 | 欧美一级爆毛片 | 美女黄色片网站 | 国产精品69毛片高清亚洲 | 中文字幕av一区二区三区 | av在线小说 | 免费高清欧美大片在线观看 |