<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Vue手把手教你擼一個 beforeEnter 鉤子函數

        來源:懂視網 責編:小采 時間:2020-11-27 22:15:54
        文檔

        Vue手把手教你擼一個 beforeEnter 鉤子函數

        Vue手把手教你擼一個 beforeEnter 鉤子函數:為什么要自造beforeEnter鉤子函數? 看下問題場景:項目中有一單詞列表頁面,每個cell都會備注該單詞是否已經掌握,點擊cell進入詳情頁,可對該單詞進行學習,并標記單詞是否掌握,并且在詳情頁面中也可以通過點擊前進 后退 按鈕學習其他的單詞。所以但我點
        推薦度:
        導讀Vue手把手教你擼一個 beforeEnter 鉤子函數:為什么要自造beforeEnter鉤子函數? 看下問題場景:項目中有一單詞列表頁面,每個cell都會備注該單詞是否已經掌握,點擊cell進入詳情頁,可對該單詞進行學習,并標記單詞是否掌握,并且在詳情頁面中也可以通過點擊前進 后退 按鈕學習其他的單詞。所以但我點

        為什么要自造beforeEnter鉤子函數?

        看下問題場景:項目中有一單詞列表頁面,每個cell都會備注該單詞是否已經掌握,點擊cell進入詳情頁,可對該單詞進行學習,并標記單詞是否掌握,并且在詳情頁面中也可以通過點擊前進 后退 按鈕學習其他的單詞。所以但我點擊返回時,單詞列表要展示所有單詞用戶掌握的最新情況。

        最終的頁面關系是這樣的:

        ​ wordListPage ——> wordDetail (對一系列單詞進行學習,退出)——> wordListPage(刷新單詞列表)

        對于上面的場景,使用Vue生命周期函數是不行的,因為Vue的生命周期函數如:beforeCreate 、created、beforeMounted、mounted等,只有在組件初始化的時候才會被調用,但是當組件(VM實例)來自于緩存(如$route.go(-1) 、keep-alive)中時,生命周期函數將不會再被調用。因此,當我從單詞詳情頁面返回至列表頁面時,找不到一個恰當的時期去出發數據更新。所以上面的場景也就無法很好的去做處理。

        當然,對于上面的場景是比較少的,但是beforeEnter鉤子函數的存在還是有必要的。

        構造beforeEnter鉤子函數

        依賴知識點:

        1. 路由:vue-router  
        2. 混入:mixin  
        3. 中央事件總線

        1.創建一個中央事件總線

        對于中央事件總線,簡單理解,就是創建一個公共Vue實例(EventBus),在不同的地方使用相同實例觸發EventBus.$emit('demo') 消息,在想要監聽事件的位置使用公共Vue實例進行監聽EventBus.$on('demo',() => {})。再說白點,就是有這么一個公共組件,它會再不同的地方發消息,又在不同的地方自己去監聽消息。所以說消息的發送和接收都是它自己實現的,所以說我們稱之為中央事件總線。

        代碼如下:libs/EventBus.js

        import Vue from 'vue';
        const EventBus = new Vue();
        export default EventBus;
        

        下面看下怎么使用

        2.路由鉤子函數beforeEach

        通過beforeEach鉤子函數,實現路由切換時觸發相應組件的beforeEnter事件。

        代碼如下:router/index.js

        import EventBus from '@/libs/EventBus';
        
        router.beforeEach((to, from, next) => {
         //如:EventBus.$emit('homeBeforeEnter');
         EventBus.$emit(to.name + 'BeforeEnter');
         
         if (to.matched.some(route => route.meta.isAuth)) {
         ...
         next()
         } else {
         next()
         }
         
        })
        
        

        3.創建全局混入對象

        這里實現路由切換事件的監聽和組件實例鉤子函數beforeEnter的觸發。

        libs/beforeEnterMixin.js

        import EventBus from './EventBus';
        
        export default {
         beforeCreate() {
         //獲取當前路由名稱,與前面使用to.name對應
         let vmName = this.$route.name;
         if (!vmName) {
         return;
         }
         // 當組件初始化時,先觸發一次,后續將不再調用
         this.$options.beforeEnter();
         const beforeEnter = vmName + 'BeforeEnter';
         //監聽路由切換時觸發的...BeforeEnter事件
         //通過this.$options獲取到實例中的beforeEnter鉤子函數
         //監聽到...BeforeEnter事件后,觸發鉤子函數beforeEnter調用
         EventBus.$on(beforeEnter, this.$options.beforeEnter);
         },
         //該函數在這里只作為占位,沒有實際意義
         beforeEnter() {}
        };
        
        

        對于該混入對象,使用全局或者局部混入都是可行的。

        全局混入:main.js

        import beforeEnterMixin from '@/libs/beforeEnterMixin';
        Vue.mixin(beforeEnterMixin);

        4.在組件中的使用

        如:home.vue

        <template>
         <div>
         首頁
         </div>
        </template>
        <script>
        export default {
         beforeEnter() {
         console.log('首頁 beforeEnter...');
         },
         created() {
         console.log('首頁 created...')
         }
        }
        </script>
        

        至此,我們的 beforeEnter 就完成了,可以做個demo自己測試下,目前本人在項目比較多的地方都會用到它。

        在此附上以上代碼的demo鏈接:https://github.com/chaoshenr/Vue-beforeEnter

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vue手把手教你擼一個 beforeEnter 鉤子函數

        Vue手把手教你擼一個 beforeEnter 鉤子函數:為什么要自造beforeEnter鉤子函數? 看下問題場景:項目中有一單詞列表頁面,每個cell都會備注該單詞是否已經掌握,點擊cell進入詳情頁,可對該單詞進行學習,并標記單詞是否掌握,并且在詳情頁面中也可以通過點擊前進 后退 按鈕學習其他的單詞。所以但我點
        推薦度:
        標簽: VUE enter 函數
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲中文字幕无码中文字在线| 成年性生交大片免费看| 亚洲一区二区三区乱码A| 亚洲AV无码一区二区一二区 | 久久亚洲中文字幕无码| 久久久www成人免费毛片| 亚洲国产精品免费观看| 毛片基地免费视频a| 亚洲精品伦理熟女国产一区二区| 成人人免费夜夜视频观看| 亚洲人av高清无码| 国产一级高清免费观看| 色多多A级毛片免费看| 亚洲乱码在线观看| 成人人免费夜夜视频观看| 美女黄频a美女大全免费皮| 亚洲国产精品视频| 中文字幕久精品免费视频| 四虎永久免费观看| 一级毛片免费播放试看60分钟| 亚洲人成色7777在线观看不卡| 中文字幕的电影免费网站| 久久夜色精品国产亚洲AV动态图 | 国产精品1024在线永久免费| 国产亚洲高清不卡在线观看| 在线永久免费的视频草莓| 亚洲自偷自偷偷色无码中文| 久久久久国色av免费看| 亚洲成A人片在线播放器| 亚洲美女高清一区二区三区| 久久福利青草精品资源站免费| 亚洲不卡1卡2卡三卡2021麻豆| 国产一区二区三区在线观看免费| 三级网站在线免费观看| 亚洲性猛交xx乱| 在线a亚洲v天堂网2018| 免费无码专区毛片高潮喷水| 久久久影院亚洲精品| 女人18特级一级毛片免费视频| 国产精品1024在线永久免费| 亚洲免费福利在线视频|