在 Vue.js 中,你可以使用路由导航守卫(Router Navigation Guards)来拦截导航、取消或重定向,以实现一些权限控制、认证等操作。Vue Router 提供了全局导航守卫、路由独享守卫、组件内守卫等多种方式。
以下是一些基本的导航守卫及其用途:
全局前置守卫(Global Before Guards):
beforeEach
: 在路由跳转前执行,用于进行全局的前置拦截,例如权限验证。router.beforeEach((to, from, next) => { // 在跳转之前进行权限验证或其他操作 if (to.meta.requiresAuth && !auth.isAuthenticated) { next('/login'); } else { next(); } });
全局解析守卫(Global Resolve Guards):
beforeResolve
: 在路由跳转前beforeEach
执行之后,解析守卫会在组件实例化之前被调用。router.beforeResolve((to, from, next) => { // 在组件实例化之前执行,可以进行一些额外的解析逻辑 next(); });
全局后置守卫(Global After Hooks):
afterEach
: 在导航完成之后调用,不会接收next
函数。router.afterEach((to, from) => { // 在导航完成之后进行一些操作,如记录日志 });
路由独享守卫(Per-Route Guard):
可以在单个路由配置中定义
beforeEnter
守卫。const route = { path: '/example', component: Example, beforeEnter: (to, from, next) => { // 在路由独享守卫中进行拦截逻辑 next(); }, };
组件内守卫(In-Component Guard):
beforeRouteEnter
,beforeRouteUpdate
,beforeRouteLeave
分别在组件被创建、更新、离开时调用。export default { beforeRouteEnter(to, from, next) { // 在组件被创建前进行一些操作 next(vm => { // 可以通过 `vm` 访问组件实例 }); }, beforeRouteUpdate(to, from, next) { // 在组件更新时进行一些操作 next(); }, beforeRouteLeave(to, from, next) { // 在组件离开前进行一些操作 next(); }, };
通过这些导航守卫,你可以在路由跳转的不同阶段进行各种操作,例如权限验证、页面切换逻辑、数据预加载等。