Vue中的全局鉤子函數可以在路由切換時對頁面進行控制,包括設置頁面的標題、進行鑒權、權限校驗、加載動畫等操作,next()函數則可以控制頁面的跳轉。下面我們來分別介紹一下這兩個功能。
全局鉤子函數指的是在頁面跳轉過程中觸發的鉤子函數,它們可以對頁面進行一些自定義的操作。在Vue中,可以通過beforeEach、beforeResolve、afterEach等全局鉤子函數來自定義一些操作。
// 全局前置守衛
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!auth.loggedIn()) {
// 如果未登錄,跳轉到登錄頁面
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
// 如果已登錄,放行
next()
}
} else {
next()
}
})
上面的代碼就是一個全局前置守衛的例子,如果訪問的頁面需要登錄驗證,則會進行跳轉。如果已登錄,則會放行;如果未登錄,則會跳轉到登錄頁面,并攜帶當前頁面的路徑參數。
next()函數是Vue中非常重要的函數,它負責控制頁面的跳轉。在全局鉤子函數中,如果沒有調用next()函數,則頁面將不能正常跳轉,會導致頁面卡死。
// 全局后置守衛
router.afterEach((to, from) => {
document.title = to.meta.title || 'Vue App'
})
另外值得注意的是,全局鉤子函數可以使用next()函數進行跳轉,但是在beforeResolve中,日志會輸出有關新加載的所有組件和管理器的解決狀態信息。因此,beforeResolve是在組件解析之前使用的鉤子,通常用于等待異步路由或組件。
總之,全局鉤子函數在路由切換時非常有用,它們可以做到很多自定義的操作,讓用戶有更好的體驗。
上一篇vue 全屏播放
下一篇vue 動態獲取ref