最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue手把手教你擼一個 beforeEnter 鉤子函數(shù)

 更新時間:2018年04月24日 10:17:08   作者:超神Code  
這篇文章主要介紹了Vue手把手教你擼一個 beforeEnter 鉤子函數(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

為什么要自造beforeEnter鉤子函數(shù)?

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

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

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

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

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

構(gòu)造beforeEnter鉤子函數(shù)

依賴知識點:

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

1.創(chuàng)建一個中央事件總線

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

代碼如下:libs/EventBus.js

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

下面看下怎么使用

2.路由鉤子函數(shù)beforeEach

通過beforeEach鉤子函數(shù),實現(xiàn)路由切換時觸發(fā)相應組件的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.創(chuàng)建全局混入對象

這里實現(xiàn)路由切換事件的監(jiān)聽和組件實例鉤子函數(shù)beforeEnter的觸發(fā)。

libs/beforeEnterMixin.js

import EventBus from './EventBus';

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解Vue3.x中組件間參數(shù)傳遞的示例代碼

    詳解Vue3.x中組件間參數(shù)傳遞的示例代碼

    在?Vue3.x?中,組件間的參數(shù)傳遞是構(gòu)建復雜應用時不可或缺的一部分,無論是父子組件還是兄弟組件之間,合理的數(shù)據(jù)流動都是保持應用狀態(tài)一致性和可維護性的關鍵,本文將通過示例代碼,詳細介紹?Vue3.x?中組件間如何傳遞參數(shù),需要的朋友可以參考下
    2024-03-03
  • Vue中使用計算屬性的知識點總結(jié)

    Vue中使用計算屬性的知識點總結(jié)

    在本篇文章里小編給大家整理了一篇關于Vue中使用計算屬性的知識點總結(jié)內(nèi)容,對此有興趣的朋友們可以跟著學習參考下。
    2021-12-12
  • Vue中動態(tài)權(quán)限到按鈕的完整實現(xiàn)方案詳解

    Vue中動態(tài)權(quán)限到按鈕的完整實現(xiàn)方案詳解

    這篇文章主要為大家詳細介紹了Vue如何在現(xiàn)有方案的基礎上加入對路由的增、刪、改、查權(quán)限控制,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-03-03
  • 使用vue2實現(xiàn)帶地區(qū)編號和名稱的省市縣三級聯(lián)動效果

    使用vue2實現(xiàn)帶地區(qū)編號和名稱的省市縣三級聯(lián)動效果

    我們知道省市區(qū)縣都有名稱和對應的數(shù)字唯一編號,使用編號可以更方便查詢以及程序處理,我們今天來了解一下使用vue2來實現(xiàn)常見的省市區(qū)下拉聯(lián)動選擇效果,需要的朋友可以參考下
    2018-11-11
  • VUE?el-table列表搜索功能純前端實現(xiàn)方法

    VUE?el-table列表搜索功能純前端實現(xiàn)方法

    Vue表搜索是指在Vue應用中實現(xiàn)對表格數(shù)據(jù)的搜索功能,下面這篇文章主要給大家介紹了關于VUE?el-table列表搜索功能純前端實現(xiàn)的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • Nginx部署Vue.js前端項目的實現(xiàn)

    Nginx部署Vue.js前端項目的實現(xiàn)

    本文主要介紹了Nginx部署Vue.js前端項目指南,幫助您實現(xiàn)從開發(fā)到線上部署的平滑過渡,確保用戶能夠獲得最佳的訪問體驗,感興趣的可以了解一下
    2024-09-09
  • vue項目雙滑塊組件使用

    vue項目雙滑塊組件使用

    這篇文章主要介紹了vue項目雙滑塊組件使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue實現(xiàn)將圖像文件轉(zhuǎn)換為base64

    vue實現(xiàn)將圖像文件轉(zhuǎn)換為base64

    這篇文章主要介紹了vue實現(xiàn)將圖像文件轉(zhuǎn)換為base64,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 詳解Vue實現(xiàn)直播功能

    詳解Vue實現(xiàn)直播功能

    這篇文章主要介紹了Vue實現(xiàn)直播功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • 三分鐘讓你快速學會axios在vue項目中的基本用法(推薦!)

    三分鐘讓你快速學會axios在vue項目中的基本用法(推薦!)

    Axios是一個基于Promise用于瀏覽器和nodejs的HTTP客戶端,下面這篇文章主要給大家介紹了如何通過三分鐘讓你快速學會axios在vue項目中的基本用法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04

最新評論

桑植县| 岢岚县| 清流县| 通海县| 磴口县| 西青区| 浦城县| 光泽县| 兴国县| 凌海市| 河曲县| 洮南市| 潞城市| 沈阳市| 汉沽区| 平果县| 文登市| 大余县| 林西县| 白银市| 富宁县| 广南县| 南昌市| 乌什县| 郑州市| 香港| 赤峰市| 宝鸡市| 东至县| 兴海县| 贵阳市| 南皮县| 汶川县| 海安县| 阳朔县| 手机| 平安县| 山东省| 南投市| 博白县| 中超|