路由導航守衛

一、認識路由導航守衛

路由導航守衛是Vue Router提供的一種機制,用於控制路由跳轉的行為,類似於前端的許可權控制。通過使用路由導航守衛,我們可以在路由切換時對訪問用戶進行控制,比如需要用戶登陸後才能訪問某些頁面,或是在用戶需要離開當前頁面之前進行一些提醒等。

Vue Router提供了三種路由導航守衛:全局守衛、路由獨享守衛和組件內的守衛。其中全局守衛會在每個路由跳轉時都會執行,而路由獨享守衛和組件內的守衛只在特定的路由跳轉情況下才會執行。

二、全局守衛

全局守衛是在路由跳轉前、路由跳轉時和路由跳轉後都可以進行一些處理,使用全局守衛需要在Vue Router實例中使用beforeEach、beforeResolve和afterEach方法,這些方法都需要傳遞一個回調函數作為參數。

1、beforeEach

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

router.beforeEach((to, from, next) => {
  // to: Route: 即將要進入的目標 路由對象
  // from: Route: 當前導航正要離開的路由
  // next: Function: 一定要調用該方法來 resolve 這個鉤子。next()、next('/login') ...
})

beforeEach方法在路由即將跳轉的情況下會被執行,to和from參數分別表示即將進入的目標路由和當前路由,next方法必須被調用以決定路由是否可以跳轉。next方法可以傳遞一個參數,參數為新的路由路徑,用於重定向到新的路由路徑。

2、beforeResolve

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

router.beforeResolve((to, from, next) => {
  // to: Route: 即將要進入的目標 路由對象
  // from: Route: 當前導航正要離開的路由
  // next: Function: 進入跳轉路由
})

beforeResolve方法在路由確認跳轉之前被觸發,它和beforeEach方法的區別是beforeResolve方法會等待所有非同步鉤子執行完畢,確保在路由跳轉前所有非同步數據都已經載入完畢。

3、afterEach

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

router.afterEach((to, from) => {
  // to: Route: 進入目標路由對象
  // from: Route: 離開的路由對象
})

afterEach方法在路由跳轉完成後被觸發,可以用於做一些頁面跳轉後的統計分析等操作。

三、路由獨享守衛

路由獨享守衛是在配置路由時添加守衛,用於在某些路由跳轉時進行特定的處理。

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

在配置路由時,可以使用beforeEnter方法添加路由獨享守衛,它和全局守衛的beforeEach方法類似,但只會在當前路由跳轉時進行處理。

四、組件內的守衛

在Vue組件內可以使用beforeRouteEnter、beforeRouteUpdate和beforeRouteLeave鉤子函數來設置路由守衛。

1、beforeRouteEnter

export default {
  beforeRouteEnter(to, from, next) {
    // ...
  }
}

beforeRouteEnter方法在進入當前組件的路由跳轉時被調用,但實例尚未被創建。

注意:在beforeRouteEnter守衛中不能使用this,因為它執行時組件實例還沒有被創建。

2、beforeRouteUpdate

export default {
  beforeRouteUpdate(to, from, next) {
    // ...
  }
}

beforeRouteUpdate方法在當前組件已經被複用時(例如相同路徑之間的路由跳轉),對路由參數的變化進行處理。

3、beforeRouteLeave

export default {
  beforeRouteLeave(to, from, next) {
    // ...
  }
}

beforeRouteLeave方法在離開當前路由時被調用,可以用於在離開前進行確認提示等操作。

結語

路由導航守衛是Vue Router提供的一種強大的功能,可以對路由跳轉進行全面的控制和自定義操作。無論是全局守衛,還是路由獨享守衛和組件內的守衛,都可以根據不同的需求進行靈活配置,為前端開發提供更多的選擇和功能。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/270052.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:35
下一篇 2024-12-16 13:35

相關推薦

  • MikroTik軟路由的全面分析

    一、什麼是MikroTik軟路由 MikroTik軟路由是基於MikroTik RouterOS操作系統搭建的網路路由器,能夠提供廣域網(WAN)和區域網(LAN)的網路連接功能,…

    編程 2025-04-25
  • 刪除靜態路由

    一、靜態路由的定義 路由(Routing)是指在一組互聯的計算機網路中,根據一定的演算法規則實現兩個節點之間選擇合適的路徑並且傳送數據包的過程。簡單來說,路由就是在網路中選擇一條可達…

    編程 2025-04-25
  • Linux加路由詳解

    一、路由介紹 路由器的作用是將數據包轉發到正確的網路上。路由器是網路互聯時必須的設備。路由器可以將網路劃分成若干個子網路,路由器之間相互通信,將數據傳遞到目的網路。 二、Linux…

    編程 2025-04-24
  • 單臂路由的作用

    一、提高網路連接速度 單臂路由採用了物理隔離網路的方式,將不同的網段分開,從而減少了網路中的衝突和干擾,提高了網路的連接速度。 /* 代碼示例一 */ #include int m…

    編程 2025-04-24
  • Vue嵌套路由的全面解析

    Vue 嵌套路由(Nested Routes) 是 Vue.js 的基礎知識之一,非常重要。本文將從多個方面進行詳細闡述,並提供代碼示例,幫助開發者更好地理解 Vue 嵌套路由的原…

    編程 2025-04-23
  • NavigationDuplicated:Vue.js路由重複

    一、什麼是NavigationDuplicated? NavigationDuplicated錯誤是Vue.js中常見的錯誤之一,它表示用戶在激活相同路由時發生了錯誤。它是Vue.…

    編程 2025-04-23
  • 微信小程序路由詳解

    微信小程序作為一種輕量級的應用程序,其路由功能在其中佔據著重要的地位。路由功能的作用在於實現不同頁面之間的跳轉,用戶在小程序中瀏覽頁面的時候就是通過路由來進行頁面的跳轉。因此,對於…

    編程 2025-04-23
  • Vue中使用this.$router.push切換路由時頁面不刷新的解決方法

    一、原因分析 在我們平時使用Vue開發項目時,經常會使用this.$router.push切換路由,從而實現頁面之間的跳轉。但是,有時候我們發現切換路由後,頁面並沒有進行刷新,這時…

    編程 2025-04-23
  • R2S軟路由設置教程

    一、ROS軟路由設置教程 ROS(RouterOS)是一種由拉蒂斯網路公司開發的專用路由操作系統,可以用於路由器和無線接入點,可以替代商用路由器,擁有功能強大的路由功能、防火牆等等…

    編程 2025-04-23
  • React獲取路由參數詳解

    一、React獲取路由參數的方法 React是一款流行的JavaScript庫,被廣泛用於構建單頁應用程序。而獲取路由參數是在React應用程序中一項很常見的任務。常見的獲取路由參…

    編程 2025-02-25

發表回復

登錄後才能評論