午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術文章
文章詳情頁

解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題

瀏覽:15日期:2022-12-25 14:48:46

bus總線是vue中路由跳轉傳遞數據的常用方法,適用于傳遞數據不多的情況,但是在使用的過程中發(fā)現,bus總線在第一次路由跳轉的時候總是不能夠成功傳遞需要傳遞的數據。檢查bus的配置以及調用方法,均沒有出錯,錯就錯在沒有理解Vue的生命周期!!!

我們知道bus的$on的監(jiān)聽應該位于$emit之前,如果在emit之前沒有創(chuàng)建監(jiān)聽事件,那么肯定是得不到需要的數據。因此,我通過兩個頁面來了解路由跳轉時兩個頁面的生命周期,下面給出其中一個頁面的部分代碼:

//頁面1 beforeCreate () { console.group(’%c%s’, ’color:red’, ’beforeCreate 創(chuàng)建前狀態(tài)===============組件1》’) }, created () { console.group(’%c%s’, ’color:red’, ’created 創(chuàng)建完畢狀態(tài)===============組件1》’) }, beforeMount () { console.group(’%c%s’, ’color:red’, ’beforeMount 掛載前狀態(tài)===============組件1》’) }, mounted () { console.group(’%c%s’, ’color:red’, ’mounted 掛載狀態(tài)===============組件1》’) }, beforeUpdate () { console.group(’%c%s’, ’color:red’, ’beforeUpdate 更新前狀態(tài)===============組件1》’) }, updated () { console.group(’%c%s’, ’color:red’, ’updated 更新狀態(tài)===============組件1》’) }, beforeDestroy () { console.group(’%c%s’, ’color:red’, ’beforeDestroy 破前狀態(tài)===============組件1》’) }, destroyed () { console.group(’%c%s’, ’color:red’, ’destroyed 破壞狀態(tài)===============組件1》’) }

當從頁面1跳轉到頁面2的時候,控制臺的打印情況如下:

解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題

從上圖便可以發(fā)現,bus第一次使用無法傳遞的原因:

在頁面1通過$emit方法傳遞數據然后跳轉路由的時候,其實頁面2的$on監(jiān)聽還沒有建立,因此無法得到數據!

基于上述原因,提出的解決辦法如下:

在頁面1的beforeDestroy或者destroyed鉤子函數中emit數據,在頁面2的beforeCreate、created或者beforeMount鉤子函數中建立$on監(jiān)聽事件,然后在頁面2的mounted鉤子函數中$on得到的數據賦值給頁面2的變量中。

//頁面1 beforeDestroy () { bus.$emit(’dataFromBus1’,this.dataFromBus1); }, //頁面2 beforeCreate () { bus.$on(’dataFromBus1’,function(url){ bus.dataFromBus1 = url }); }, mounted () { this.dataFromBus1 = bus.dataFromBus1; },

解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題

可以發(fā)現,第一次跳轉的時候頁面2就能夠得到傳遞的數據!!!

這個坑應該是使用bus必須會 踩到的,希望下次使用的時候能夠留個心眼!!!

補充知識:vue非父子組件傳值(bus)遇到的坑

解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題

解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題

控制臺可以打印出傳遞過來的值,但就是不會渲染到頁面上那么重點來了!!!

解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題

在A銷毀之前,B組件的beforeCreate ,created,和beforeMount這三個鉤子函數先觸發(fā),之后才是A組件的銷毀鉤子的觸發(fā),因為總線Bus要求要先有監(jiān)聽在觸發(fā),才能成功監(jiān)聽,所以我們只能在A組件的beforeDestroy或者destroyed這兩個生命周期鉤子中觸發(fā)函數emit,同理也只能在B組中的beforeCreate,created,和beforeMount這三個鉤子函數中監(jiān)聽 emit,同理也只能在B組中的beforeCreate ,created,和beforeMount這三個鉤子函數中監(jiān)聽emit,同理也只能在B組中的beforeCreate,created,和beforeMount這三個鉤子函數中監(jiān)聽on。

解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題

解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題

頁面渲染的值如下圖所示

解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題

還是有之前重復觸發(fā)的問題,還是會隨著切換次數的增加而使監(jiān)聽函數觸發(fā)的次數增加,解決這個問題就簡單了。在我們用總線傳值的時候要記得關閉監(jiān)聽,在B組件中的destroyed鉤子中增加EventBus.$off方法即可,至此就沒問題了。

以上這篇解決Vue使用bus總線時,第一次路由跳轉時數據沒成功傳遞問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
主站蜘蛛池模板: 国产88av| 五十路在线观看 | 操操操操操操操操操操 | 黄网免费在线观看 | 少妇综合 | yellow在线观看 | 免费观看黄色网 | 日韩高清二区 | 涩涩资源网 | 91尤物国产福利在线观看 | 国产美女久久 | 毛片网站视频 | 一二三不卡 | 综合av在线 | 色欧美片视频在线观看 | 色视频在线观看免费 | 一级大片视频 | 欧美性生交大片免费看 | 超碰66| 日韩av在线免费播放 | 欧洲av在线 | 国产亚洲精品久久久久久豆腐 | 麻豆91精品91久久久 | 亚洲天堂自拍 | 成人精品国产免费网站 | 精品无人国产偷自产在线 | 亚洲国产精品久久久久久久 | 91久久国产综合久久91精品网站 | 懂色av一区二区在线播放 | 久草成人在线 | 欧美精品一区二区三区视频 | 精品日本一区二区三区在线观看 | 91成人在线免费视频 | 五月天亚洲综合 | 日韩欧美久久 | 日本黄色不卡视频 | 蜜桃av免费观看 | 日韩免费久久 | 久久亚洲在线 | 欧美日韩精品免费观看 | 麻豆精品国产 |