在Vue中,导航守卫是一组用于控制路由导航的钩子函数。这些钩子函数允许你在路由导航的不同阶段执行一些操作,比如在路由切换之前进行验证、处理路由变化等。
Vue提供了三种类型的导航守卫:
- 全局前置守卫:在路由切换之前执行,适用于整个应用的路由。
- 路由独享的守卫:在特定路由配置中定义的守卫,只对该路由生效。(不常用)
- 组件内的守卫:在组件内部定义的守卫,只对该组件的路由生效。
下面是每种导航守卫的示例和说明:
-
全局前置守卫:router.beforeEach(to, from, next) ***(常用)
import router from './router';
router.beforeEach((to, from, next) => {
// 在路由切换之前执行的逻辑
console.log('Before navigating to', to.path);// 继续导航
next();
}); -
路由独享的守卫:
import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/components/Home';
import AdminDashboard from '@/components/AdminDashboard';Vue.use(Router);
const router = new Router({
routes: [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/admin',
name: 'AdminDashboard',
component: AdminDashboard,
beforeEnter: (to, from, next) => {
// 在路由切换之前执行的逻辑
console.log('Before entering AdminDashboard');// 继续导航 next(); } }
]
});export default router;
在上述示例中,AdminDashboard
路由配置中定义了一个beforeEnter
守卫,只有当访问该路由时才会触发。
-
组件内的守卫:
<template>Product Detail
// 继续导航 next();
},
beforeRouteLeave(to, from, next) {
// 在组件离开路由之前执行的逻辑
console.log('Before leaving ProductDetail');// 继续导航 next();
}
};
</script>
在上述示例中,ProductDetail
组件内部定义了两个导航守卫:beforeRouteEnter
和beforeRouteLeave
。beforeRouteEnter
在组件进入路由之前执行,beforeRouteLeave
在组件离开路由之前执行。
通过使用这些导航守卫,你可以在路由导航的不同阶段执行自定义的逻辑,例如验证用户权限、处理数据加载等。请根据你的需求选择适当的导航守卫类型,并在相应的位置定义守卫函数。