当前位置:首页 > 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 守卫,仅对当前路由生效。适用于特定路由的权限控制或数据预加载。

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

组件内守卫

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

  • 选项式 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如何实现两栏布局

使用 Flexbox 实现两栏布局 通过 Flexbox 可以快速实现两栏布局,适合现代浏览器。在 Vue 的模板中,使用 display: flex 和 flex 属性控制两栏的宽度比例。 <…

vue实现前端路由

vue实现前端路由

Vue 实现前端路由的方法 Vue 可以通过 Vue Router 实现前端路由管理。以下是具体实现步骤: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Router:…

如何实现vue表格联动

如何实现vue表格联动

实现 Vue 表格联动的方法 数据绑定与响应式更新 通过 Vue 的响应式特性,将多个表格的数据绑定到同一个数据源或计算属性。当一个表格的数据发生变化时,另一个表格会自动更新。例如: data()…

vue如何实现记住我

vue如何实现记住我

实现“记住我”功能的步骤 在Vue中实现“记住我”功能通常涉及前端保存用户登录状态(如token)到本地存储,并在下次访问时自动恢复登录状态。以下是具体实现方法: 使用localStorage或…

vue实现点击跳转路由

vue实现点击跳转路由

vue实现点击跳转路由的方法 在Vue中实现点击跳转路由,可以通过以下几种方式完成,具体取决于项目使用的路由管理工具(如Vue Router)以及需求场景。 使用router-link组件 rou…

vue如何实现mvvm

vue如何实现mvvm

Vue 的 MVVM 实现原理 Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。其核心在于将数据模型(Model)与视图(View)通过 ViewMod…