国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:19:44
字體:
來源:轉載
供稿:網友

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

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

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

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

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

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

構造beforeEnter鉤子函數

依賴知識點:

    路由:vue-router   混入:mixin   中央事件總線

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() {}};            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 上林县| 四川省| 崇阳县| 福安市| 华坪县| 绥芬河市| 五河县| 大石桥市| 新乐市| 顺义区| 克东县| 乳源| 阜宁县| 镇原县| 深州市| 瑞昌市| 龙门县| 开阳县| 进贤县| 古交市| 益阳市| 江华| 上饶县| 铜川市| 固始县| 清原| 南汇区| 肇州县| 浙江省| 余姚市| 揭西县| 威海市| 兴宁市| 东莞市| 永顺县| 砀山县| 临漳县| 横山县| 绍兴市| 右玉县| 诸城市|