当前位置:首页 > VUE

vue如何实现路由守卫

2026-02-23 21:55:08VUE

全局前置守卫

使用 router.beforeEach 可以注册全局前置守卫,在路由跳转前执行逻辑。该方法接收三个参数:to(目标路由)、from(当前路由)、next(回调函数)。通过调用 next() 允许跳转,next(false) 中断跳转,或 next('/login') 重定向到其他路由。

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isAuthenticated()) {
    next('/login');
  } else {
    next();
  }
});

路由独享守卫

在路由配置中直接定义 beforeEnter 守卫,仅对当前路由生效。适用于特定路由的权限控制或数据预加载。

vue如何实现路由守卫

const routes = [
  {
    path: '/admin',
    component: AdminPanel,
    beforeEnter: (to, from, next) => {
      if (!user.isAdmin) next('/forbidden');
      else next();
    }
  }
];

组件内守卫

在组件内部通过选项式 API 或组合式 API 定义守卫:

vue如何实现路由守卫

  • 选项式 API:使用 beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave 钩子。
  • 组合式 API:通过 onBeforeRouteUpdateonBeforeRouteLeave 函数。
// 选项式 API
export default {
  beforeRouteEnter(to, from, next) {
    next(vm => {
      vm.fetchData(); // 访问组件实例
    });
  },
  beforeRouteLeave(to, from, next) {
    if (hasUnsavedChanges) {
      confirm('确认离开?') ? next() : next(false);
    } else next();
  }
};

// 组合式 API
import { onBeforeRouteLeave } from 'vue-router';
onBeforeRouteLeave((to, from, next) => {
  // 处理离开逻辑
});

全局后置钩子

通过 router.afterEach 注册全局后置守卫,常用于日志记录或页面标题修改。注意后置钩子没有 next 参数。

router.afterEach((to, from) => {
  document.title = to.meta.title || '默认标题';
  logRouteAccess(to.path);
});

导航解析流程

路由守卫的执行顺序为:

  1. 导航触发
  2. 调用失活组件的 beforeRouteLeave
  3. 调用全局 beforeEach
  4. 在重用的组件中调用 beforeRouteUpdate
  5. 调用路由配置的 beforeEnter
  6. 解析异步路由组件
  7. 调用激活组件的 beforeRouteEnter
  8. 调用全局 beforeResolve(2.5+)
  9. 导航确认
  10. 调用全局 afterEach
  11. 触发 DOM 更新
  12. 执行 beforeRouteEnter 中传给 next 的回调函数

分享给朋友:

相关文章

vue路由实现原理

vue路由实现原理

Vue 路由实现原理 Vue Router 是 Vue.js 的官方路由管理器,其核心原理基于前端路由的实现方式,主要包括哈希模式(Hash Mode)和历史模式(History Mode)。 哈希…

vue如何实现

vue如何实现

Vue 实现方法 Vue 提供了多种方式来实现功能,具体取决于需求。以下是一些常见场景的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。在组件中可以通过 pro…

vue路由实现滑动

vue路由实现滑动

路由切换滑动动画实现 在Vue中实现路由切换时的滑动动画,可以通过Vue的过渡系统结合CSS动画或第三方库完成。以下是几种常见方法: 使用Vue过渡 + CSS动画 包裹<router-vie…

vue如何实现计算

vue如何实现计算

Vue 计算属性的实现方法 在 Vue 中,计算属性(computed properties)是一种基于响应式依赖进行缓存的属性,适用于处理复杂逻辑或依赖其他数据属性的场景。以下是实现计算属性的几种方…

vue如何实现滚动

vue如何实现滚动

Vue 实现滚动的方法 使用原生滚动 在Vue中可以直接使用HTML原生滚动,通过CSS设置overflow: auto或overflow: scroll来实现滚动效果。适用于简单场景。 <d…

vue实现路由守卫

vue实现路由守卫

路由守卫的基本概念 路由守卫是Vue Router提供的一种机制,用于在路由跳转前后执行特定的逻辑。它可以用于权限控制、页面访问限制、数据预加载等场景。Vue Router提供了多种路由守卫,包括全局…