vue的導航守衛怎么使用

這篇文章主要講解了“vue的導航守衛怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“vue的導航守衛怎么使用”吧!

創新互聯公司,為您提供重慶網站建設公司重慶網站制作、網站營銷推廣、網站開發設計,對服務報廢汽車回收等多個行業擁有豐富的網站建設及推廣經驗。創新互聯公司網站建設公司成立于2013年,提供專業網站制作報價服務,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發展進步,是我們永遠的責任!

導航守衛有:1、全局前置守衛“beforeEach”;2、全局解析守衛“beforeResolve”;3、路由獨享的守衛“beforeEnter”;4、組件內的守衛“beforeRouteEnter”、“beforeRouteLeave”。

vue的導航守衛怎么使用

本教程操作環境:windows7系統、vue2.9.6版,DELL G3電腦。

vue-router 提供的導航守衛主要用來通過跳轉或取消的方式守衛導航。有多種機會植入路由導航過程中:全局的, 單個路由獨享的, 或者組件級的。

記住參數或查詢的改變并不會觸發進入/離開的導航守衛。你可以通過觀察 $route 對象來應對這些變化,或使用 beforeRouteUpdate 的組件內守衛。

全局前置守衛

你可以使用 router.beforeEach 注冊一個全局前置守衛:

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

當一個導航觸發時,全局前置守衛按照創建順序調用。守衛是異步解析執行,此時導航在所有守衛 resolve 完之前一直處于 等待中。

每個守衛方法接收三個參數:

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

  • from: Route: 當前導航正要離開的路由

  • next: Function: 一定要調用該方法來 resolve 這個鉤子。執行效果依賴 next 方法的調用參數。

    • next(): 進行管道中的下一個鉤子。如果全部鉤子執行完了,則導航的狀態就是 confirmed (確認的)。

    • next(false): 中斷當前的導航。如果瀏覽器的 URL 改變了 (可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應的地址。

    • next('/') 或者 next({ path: '/' }): 跳轉到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。你可以向 next 傳遞任意位置對象,且允許設置諸如 replace: true、name: 'home' 之類的選項以及任何用在 router-link 的 to prop 或 router.push 中的選項。

    • next(error): (2.4.0+) 如果傳入 next 的參數是一個 Error 實例,則導航會被終止且該錯誤會被傳遞給 router.onError() 注冊過的回調。

確保 next 函數在任何給定的導航守衛中都被嚴格調用一次。它可以出現多于一次,但是只能在所有的邏輯路徑都不重疊的情況下,否則鉤子永遠都不會被解析或報錯。這里有一個在用戶未能驗證身份時重定向到 /login 的示例:

// BAD
router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  // 如果用戶未能驗證身份,則 `next` 會被調用兩次
  next()
})
// GOOD
router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  else next()
})

全局解析守衛

2.5.0 新增

在 2.5.0+ 你可以用 router.beforeResolve 注冊一個全局守衛。這和 router.beforeEach 類似,區別是在導航被確認之前,同時在所有組件內守衛和異步路由組件被解析之后,解析守衛就被調用。

路由獨享的守衛

你可以在路由配置上直接定義 beforeEnter 守衛:

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

這些守衛與全局前置守衛的方法參數是一樣的。

組件內的守衛

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

  • beforeRouteEnter

  • beforeRouteUpdate (2.2 新增)

  • beforeRouteLeave

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

beforeRouteEnter 守衛 不能 訪問 this,因為守衛在導航確認前被調用,因此即將登場的新組件還沒被創建。

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

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

注意 beforeRouteEnter 是支持給 next 傳遞回調的唯一守衛。對于 beforeRouteUpdate 和 beforeRouteLeave 來說,this 已經可用了,所以不支持傳遞回調,因為沒有必要了。

beforeRouteUpdate (to, from, next) {
  // just use `this`
  this.name = to.params.name
  next()
}

這個離開守衛通常用來禁止用戶在還未保存修改前突然離開。該導航可以通過 next(false) 來取消。

beforeRouteLeave (to, from, next) {
  const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
  if (answer) {
    next()
  } else {
    next(false)
  }
}

完整的導航解析流程

  • 導航被觸發。

  • 在失活的組件里調用 beforeRouteLeave 守衛。

  • 調用全局的 beforeEach 守衛。

  • 在重用的組件里調用 beforeRouteUpdate 守衛 (2.2+)。

  • 在路由配置里調用 beforeEnter。

  • 解析異步路由組件。

  • 在被激活的組件里調用 beforeRouteEnter。

  • 調用全局的 beforeResolve 守衛 (2.5+)。

  • 導航被確認。

  • 調用全局的 afterEach 鉤子。

  • 觸發 DOM 更新。

  • 調用 beforeRouteEnter 守衛中傳給 next 的回調函數,創建好的組件實例會作為回調函數的參數傳入。

感謝各位的閱讀,以上就是“vue的導航守衛怎么使用”的內容了,經過本文的學習后,相信大家對vue的導航守衛怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!

當前題目:vue的導航守衛怎么使用
鏈接地址:http://m.kartarina.com/article44/pihsee.html

成都網站建設公司_創新互聯,為您提供、云服務器、域名注冊、做網站、定制網站企業網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計
主站蜘蛛池模板: 成人无码区免费视频观看| 无码人妻丰满熟妇啪啪| 国产成人综合日韩精品无码不卡 | 超清无码熟妇人妻AV在线电影| 日韩人妻无码一区二区三区综合部| 亚洲av激情无码专区在线播放| 日韩一区二区三区无码影院| 蜜臀亚洲AV无码精品国产午夜.| 亚洲AV永久纯肉无码精品动漫 | 无码激情做a爰片毛片AV片| 亚洲精品~无码抽插| 免费无码又爽又刺激高潮| 无码中文人妻视频2019| 国产日韩AV免费无码一区二区三区| 亚洲AV无码精品蜜桃| 东京热人妻无码人av| 18禁成年无码免费网站无遮挡| 亚洲爆乳精品无码一区二区三区 | 国产成人AV片无码免费| 成人免费无码大片A毛片抽搐| 亚洲的天堂av无码| 久久久久亚洲av无码尤物| 中文字幕人妻三级中文无码视频| 东京热一精品无码AV| 色国产色无码色欧美色在线| 亚洲精品GV天堂无码男同| 无码人妻一区二区三区在线视频| 国产亚洲情侣一区二区无码AV | 亚洲av日韩av无码| 日韩精品无码免费专区午夜不卡| 日本精品人妻无码免费大全| 精品无码日韩一区二区三区不卡| 亚洲va无码va在线va天堂| 亚洲韩国精品无码一区二区三区 | 亚洲中文久久精品无码1| 少妇无码一区二区三区| 无码人妻熟妇AV又粗又大| 亚洲AV无码久久精品色欲| 亚洲AV日韩AV永久无码绿巨人| 亚洲av激情无码专区在线播放| 亚洲∧v久久久无码精品|