欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解VueRouter進階之導航鉤子和路由元信息

 更新時間:2017年09月13日 10:52:05   作者:Smallmotor  
本篇文章主要介紹了詳解VueRouter進階之導航鉤子和路由元信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下

導航鉤子

vue-router 提供的導航鉤子主要用來攔截導航,讓它完成跳轉或取消。有多種方式可以在路由導航發(fā)生時執(zhí)行鉤子:全局的, 單個路由獨享的, 或者組件級的。

全局鉤子

你可以使用 router.beforeEach 注冊一個全局的 before 鉤子:

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
 // ...
})

當一個導航觸發(fā)時,全局的 before 鉤子按照創(chuàng)建順序調用。鉤子是異步解析執(zhí)行,此時導航在所有鉤子 resolve 完之前一直處于 等待中。

每個鉤子方法接收三個參數(shù):

  • to: Route: 即將要進入的目標 路由對象
  • from: Route: 當前導航正要離開的路由
  • next: Function: 一定要調用該方法來 resolve 這個鉤子。執(zhí)行效果依賴 next 方法的調用參數(shù)。
  • next(): 進行管道中的下一個鉤子。如果全部鉤子執(zhí)行完了,則導航的狀態(tài)就是 confirmed (確認的)。
  • next(false): 中斷當前的導航。如果瀏覽器的 URL 改變了(可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應的地址。
  • next('/') 或者 next({ path: '/' }): 跳轉到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。

確保要調用 next 方法,否則鉤子就不會被 resolved。

同樣可以注冊一個全局的 after 鉤子,不過它不像 before 鉤子那樣,after 鉤子沒有 next 方法,不能改變導航:

router.afterEach(route => {
 // ...
})

你可以在路由配置上直接定義 beforeEnter 鉤子:

const router = new VueRouter({
 routes: [
  {
   path: '/foo',
   component: Foo,
   beforeEnter: (to, from, next) => {
    // ...
   }
  }
 ]
})

這些鉤子與全局 before 鉤子的方法參數(shù)是一樣的。

組件內的鉤子

最后,你可以在路由組件內直接定義以下路由導航鉤子:

beforeRouteEnter
beforeRouteUpdate (2.2 新增)
beforeRouteLeave
const Foo = {
 template: `...`,
 beforeRouteEnter (to, from, next) {
  // 在渲染該組件的對應路由被 confirm 前調用
  // 不!能!獲取組件實例 `this`
  // 因為當鉤子執(zhí)行前,組件實例還沒被創(chuàng)建
 },
 beforeRouteUpdate (to, from, next) {
  // 在當前路由改變,但是該組件被復用時調用
  // 舉例來說,對于一個帶有動態(tài)參數(shù)的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉的時候,
  // 由于會渲染同樣的 Foo 組件,因此組件實例會被復用。而這個鉤子就會在這個情況下被調用。
  // 可以訪問組件實例 `this`
 },
 beforeRouteLeave (to, from, next) {
  // 導航離開該組件的對應路由時調用
  // 可以訪問組件實例 `this`
 }
}

beforeRouteEnter 鉤子 不能 訪問 this,因為鉤子在導航確認前被調用,因此即將登場的新組件還沒被創(chuàng)建。

不過,你可以通過傳一個回調給 next來訪問組件實例。在導航被確認的時候執(zhí)行回調,并且把組件實例作為回調方法的參數(shù)。

beforeRouteEnter (to, from, next) {
 next(vm => {
  // 通過 `vm` 訪問組件實例
 })
}

路由元信息

你可以 在 beforeRouteLeave 中直接訪問 this。這個 leave 鉤子通常用來禁止用戶在還未保存修改前突然離開??梢酝ㄟ^ next(false) 來取消導航。

定義路由的時候可以配置 meta 字段:

const router = new VueRouter({
 routes: [
  {
   path: '/foo',
   component: Foo,
   children: [
    {
     path: 'bar',
     component: Bar,
     // a meta field
     meta: { requiresAuth: true }
    }
   ]
  }
 ]
})

那么如何訪問這個 meta 字段呢?

首先,我們稱呼 routes 配置中的每個路由對象為 路由記錄。路由記錄可以是嵌套的,因此,當一個路由匹配成功后,他可能匹配多個路由記錄

例如,根據(jù)上面的路由配置,/foo/bar 這個 URL 將會匹配父路由記錄以及子路由記錄。

一個路由匹配到的所有路由記錄會暴露為 $route 對象(還有在導航鉤子中的 route 對象)的 $route.matched 數(shù)組。因此,我們需要遍歷 $route.matched 來檢查路由記錄中的 meta 字段。

下面例子展示在全局導航鉤子中檢查 meta 字段:

router.beforeEach((to, from, next) => {
 if (to.matched.some(record => record.meta.requiresAuth)) {
  // this route requires auth, check if logged in
  // if not, redirect to login page.
  if (!auth.loggedIn()) {
   next({
    path: '/login',
    query: { redirect: to.fullPath }
   })
  } else {
   next()
  }
 } else {
  next() // 確保一定要調用 next()
 }
})

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

相關文章

  • Vue子組件內的props對象參數(shù)配置方法

    Vue子組件內的props對象參數(shù)配置方法

    這篇文章主要介紹了?Vue?子組件內的??props?對象里的?default?參數(shù)是如何定義Array、?Object?、或?Function?默認值的正確寫法說明,感興趣的朋友跟隨小編一起看看吧
    2022-08-08
  • 解決Antd中Form表單的onChange事件中執(zhí)行setFieldsValue不生效

    解決Antd中Form表單的onChange事件中執(zhí)行setFieldsValue不生效

    這篇文章主要介紹了解決Antd中Form表單的onChange事件中執(zhí)行setFieldsValue不生效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • element-ui el-dialog嵌套table組件,ref問題及解決

    element-ui el-dialog嵌套table組件,ref問題及解決

    這篇文章主要介紹了element-ui el-dialog嵌套table組件,ref問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • vue前端如何向后端傳遞參數(shù)

    vue前端如何向后端傳遞參數(shù)

    這篇文章主要介紹了vue前端如何向后端傳遞參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • ElementUI中的el-dropdown傳入多參數(shù)的實現(xiàn)方法

    ElementUI中的el-dropdown傳入多參數(shù)的實現(xiàn)方法

    本文主要介紹了ElementUI中的el-dropdown傳入多參數(shù)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Vue.js實現(xiàn)開發(fā)購物車功能的方法詳解

    Vue.js實現(xiàn)開發(fā)購物車功能的方法詳解

    這篇文章主要介紹了Vue.js實現(xiàn)開發(fā)購物車功能的方法,結合實例形式分析了基于vue.js開發(fā)的購物車功能相關操作步驟與實現(xiàn)技巧,需要的朋友可以參考下
    2019-02-02
  • vue-cli 介紹與安裝

    vue-cli 介紹與安裝

    這篇文章主要給大家介紹的是vue-cli 介紹與安裝,vue-cli是和vue進行深度組合的工具,可以快速幫我們創(chuàng)建vue項目,并且把一些腳手架相關的代碼給我們創(chuàng)建好。真正使用vue開發(fā)項目,都是用vue-cli來創(chuàng)建項目的,下面文章詳細內容,需要的朋友可以參考一下
    2021-10-10
  • vue+echarts實現(xiàn)堆疊柱狀圖

    vue+echarts實現(xiàn)堆疊柱狀圖

    這篇文章主要為大家詳細介紹了vue+echarts實現(xiàn)堆疊柱狀圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue.js下拉菜單組件使用方法詳解

    Vue.js下拉菜單組件使用方法詳解

    這篇文章主要為大家詳細介紹了Vue.js下拉菜單組件的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • vue懸浮表單復合組件開發(fā)詳解

    vue懸浮表單復合組件開發(fā)詳解

    這篇文章主要為大家詳細介紹了vue懸浮表單復合組件開發(fā),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論