亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于Vue Router中路由守衛(wèi)的應(yīng)用及在全局導(dǎo)航守衛(wèi)中檢查元字段的方法

 更新時間:2018年12月09日 09:37:51   作者:godDie  
這篇文章主要介紹了關(guān)于Vue Router中路由守衛(wèi)的應(yīng)用及在全局導(dǎo)航守衛(wèi)中檢查元字段的方法,實現(xiàn)方法有兩種,本文通過實例代碼對每種方法介紹的很詳細,需要的朋友參考下

 #在切換路由時,組件會被復(fù)用,不過,這也意味著組件的生命周期鉤子不會再被調(diào)用。

   解決辦法有兩種,1簡單地 watch (監(jiān)測變化) $route 對象:

const User = {
 template: '...',
 watch: {
  '$route' (to, from) {
   // 對路由變化作出響應(yīng)...
  }
 }
}

    2.使用 2.2 中引入的 beforeRouteUpdate 導(dǎo)航守衛(wèi):

const User = {
 template: '...',
 beforeRouteUpdate (to, from, next) {
  // react to route changes...
  // don't forget to call next()
 }
}

#全局守衛(wèi)

你可以使用 router.beforeEach 注冊一個全局前置守衛(wèi):

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

•to: Route: 即將要進入的目標 路由對象

•from: Route: 當前導(dǎo)航正要離開的路由

•next: Function: 一定要調(diào)用該方法來 resolve 這個鉤子

#全局解析守衛(wèi)

在 2.5.0+ 你可以用 router.beforeResolve 注冊一個全局守衛(wèi)。這和 router.beforeEach 類似,區(qū)別是在導(dǎo)航被確認之前,同時在所有組件內(nèi)守衛(wèi)和異步路由組件被解析之后,解析守衛(wèi)就被調(diào)用。

#全局后置鉤子

你也可以注冊全局后置鉤子,然而和守衛(wèi)不同的是,這些鉤子不會接受 next 函數(shù)也不會改變導(dǎo)航本身:

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

#路由獨享的守衛(wèi)

你可以在路由配置上直接定義 beforeEnter 守衛(wèi)

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

這些守衛(wèi)與全局前置守衛(wèi)的方法參數(shù)是一樣的。

#組件內(nèi)的守衛(wèi)

你可以在路由組件內(nèi)直接定義以下路由導(dǎo)航守衛(wèi):

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

beforeRouteEnter 守衛(wèi) 不能 訪問 this,因為守衛(wèi)在導(dǎo)航確認前被調(diào)用,因此即將登場的新組件還沒被創(chuàng)建。

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

export default {
  data(){
    return {
       num: 18
    }
  },
  beforeRouteEnter(to, from, next){
    next(vm=>{
      vm.num=22;
    })
  }
}

注意 beforeRouteEnter 是支持給 next 傳遞回調(diào)的唯一守衛(wèi)。對于 beforeRouteUpdate 和 beforeRouteLeave 來說,this 已經(jīng)可用了,所以不支持傳遞回調(diào),因為沒有必要了

#完整的導(dǎo)航解析流程

1.導(dǎo)航被觸發(fā)。
2.在失活的組件里調(diào)用離開守衛(wèi)。
3.調(diào)用全局的 beforeEach 守衛(wèi)。
4.在重用的組件里調(diào)用 beforeRouteUpdate 守衛(wèi) (2.2+)。
5.在路由配置里調(diào)用 beforeEnter。
6.解析異步路由組件。
7.在被激活的組件里調(diào)用 beforeRouteEnter。
8.調(diào)用全局的 beforeResolve 守衛(wèi) (2.5+)。
9.導(dǎo)航被確認。
10.調(diào)用全局的 afterEach 鉤子。
11.觸發(fā) DOM 更新。
12.用創(chuàng)建好的實例調(diào)用 beforeRouteEnter 守衛(wèi)中傳給 next 的回調(diào)函數(shù)。

#在全局導(dǎo)航守衛(wèi)中檢查元字段

router.beforeEach((to, from, next) => {
 if (to.matched.some(record => record.meta.requiresAuth)) {
  //如果路由中有meta的requireAuth,且為true,就不進行登錄驗證,否則進行登錄驗證
  if (!auth.loggedIn()) {
   next({
    path: '/login',
    query: { redirect: to.fullPath }
   })
  } else {
   next()
  }
 } else {
  next() // 確保一定要調(diào)用 next()
 }
})

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

  注:1、meta 字段就是路由元信息字段,requiresAuth 是自己起的字段名稱,用來標記這個路由信息是否需要檢測,true 表示要檢測,false 表示不需要檢測(這個名稱隨便起,比如我自己的就起的 requiresId,建議起個有意義的名稱)

  2、if (to.matched.some(record => record.meta.requiresAuth) ),如果對這類寫法不熟悉,可以去看看es6的箭頭函數(shù),這句話就是返回遍歷的某個路由對象,我們定義為為record,檢測這個對象是否擁有meta這個對象,如果有meta這個對象,檢測它的meta對象是不是有requiresAuth這個屬性,且為true,如果滿足上述條件,就確定了是這個/foo/bar路由。

  3、some() 方法測試數(shù)組中的某些元素是否通過了指定函數(shù)的測試。語法:arr.some(callback[, thisArg]);

    some 為數(shù)組中的每一個元素執(zhí)行一次 callback 函數(shù),直到找到一個使得 callback 返回一個“真值”(即可轉(zhuǎn)換為布爾值 true 的值)。如果找到了這樣一個值,some 將會立即返回 true。否則,some 返回 false。callback 只會在那些”有值“的索引上被調(diào)用,不會在那些被刪除或從來未被賦值的索引上調(diào)用。

     callback 被調(diào)用時傳入三個參數(shù):元素的值,元素的索引,被遍歷的數(shù)組。

  4、vue-router路由元信息說白了就是通過meta對象中的一些屬性來判斷當前路由是否需要進一步處理,如果需要處理,按照自己想要的效果進行處理即可!

總結(jié)

以上所述是小編給大家介紹的關(guān)于Vue Router中路由守衛(wèi)的應(yīng)用及在全局導(dǎo)航守衛(wèi)中檢查元字段的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • vue中l(wèi)et that=this的作用及說明

    vue中l(wèi)et that=this的作用及說明

    這篇文章主要介紹了vue中l(wèi)et that=this的作用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue-cli如何修改打包項目結(jié)構(gòu)及前綴

    vue-cli如何修改打包項目結(jié)構(gòu)及前綴

    這篇文章主要介紹了vue-cli如何修改打包項目結(jié)構(gòu)及前綴問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解vue修改elementUI的分頁組件視圖沒更新問題

    詳解vue修改elementUI的分頁組件視圖沒更新問題

    這篇文章主要介紹了詳解vue修改elementUI的分頁組件視圖沒更新問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Vue2與Vue3如何利用install自定義全局確認框組件編寫

    Vue2與Vue3如何利用install自定義全局確認框組件編寫

    這篇文章主要介紹了Vue2與Vue3如何利用install自定義全局確認框組件編寫方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue解決Not?allowed?to?load?local?resource問題的全過程

    vue解決Not?allowed?to?load?local?resource問題的全過程

    這篇文章主要給大家介紹了關(guān)于vue解決Not?allowed?to?load?local?resource問題的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • vue 下列表側(cè)滑操作實例代碼詳解

    vue 下列表側(cè)滑操作實例代碼詳解

    本文通過實例代碼給大家介紹了vue 下列表側(cè)滑操作,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • vue實現(xiàn)經(jīng)典選項卡功能

    vue實現(xiàn)經(jīng)典選項卡功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)經(jīng)典選項卡功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue 圖片壓縮并上傳至服務(wù)器功能

    Vue 圖片壓縮并上傳至服務(wù)器功能

    這篇文章主要介紹了Vue 圖片壓縮并上傳至服務(wù)器功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 詳解vue-resource promise兼容性問題

    詳解vue-resource promise兼容性問題

    這篇文章主要介紹了詳解vue-resource promise兼容性問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Vue的模板語法以及實戰(zhàn)案例

    Vue的模板語法以及實戰(zhàn)案例

    Vue使用了基于HTML的模板語法,允許開發(fā)者聲明式地將DOM綁定至底層Vue實例的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Vue的模板語法以及案例的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06

最新評論