Vue Router 是 Vue.js 官方的路由管理器。它與Vue.js深度集成,允許您輕松構建單頁面應用程序。
路由鉤子是 Vue Router 提供的一種回調函數,主要用于控制路由的行為。Vue Router 提供了多個鉤子函數,包括:beforeEach、beforeResolve、afterEach。
beforeEach 鉤子函數會在路由跳轉之前被調用。它可以接受三個參數:to、from 和 next。to 表示要進入的路由,from 表示要離開的路由。next 是一個函數,用來控制路由行為。如果調用 next(),則進入下一個鉤子或者路由。如果調用 next(false),則終止路由導航。如果調用 next('path'),則導航到指定的路徑,而不是目標路徑。
// beforeEach 鉤子函數示例 router.beforeEach((to, from, next) =>{ if (to.meta.requiresAuth && !auth.loggedIn()) { next({ path: '/login', query: { redirect: to.fullPath } }) } else { next() } })
beforeResolve 鉤子函數會在路由跳轉完成之前被調用。它也可以接受三個參數:to、from 和 next。beforeResolve 鉤子函數主要用于異步導航,確保組件先解析完畢,然后才會跳轉成功。
// beforeResolve 鉤子函數示例 router.beforeResolve((to, from, next) =>{ // 異步導航時顯示加載中狀態 startLoading() next() }) router.afterEach((to, from) =>{ // 取消加載中狀態 endLoading() })
afterEach 鉤子函數會在路由跳轉完成之后被調用。它可以接收兩個參數:to 和 from。afterEach 鉤子函數主要用于路由跳轉之后的回調處理,并不能阻止路由跳轉。
// afterEach 鉤子函數示例 router.afterEach((to, from) =>{ // 滾動頁面到頂部 window.scrollTo(0, 0) })
總體來說,Vue Router 的路由鉤子函數提供了多種可供選擇的鉤子,可以靈活地控制路由的行為。但是需要注意的是,路由鉤子函數在某些情況下可能會非常復雜,并且錯誤處理可能會很困難,因此在使用它們時需要謹慎。