当前位置:首页 > 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 中实现路由导航通常使用 Vue Router 库。以下是具体实现方法: 安装 Vue Router 在项目中安装 Vue Router 依赖: npm instal…

vue如何实现曲线图

vue如何实现曲线图

使用 ECharts 实现曲线图 在 Vue 项目中安装 ECharts 依赖: npm install echarts --save 引入 ECharts 并创建基础图表组件: <temp…

h5响应式布局如何实现

h5响应式布局如何实现

使用媒体查询(Media Queries) 通过CSS媒体查询针对不同屏幕尺寸设置不同的样式规则。例如: @media screen and (max-width: 768px) { .co…

vue如何实现分离

vue如何实现分离

Vue 实现代码分离的方法 Vue 提供了多种方式实现代码分离,提升项目的可维护性和模块化程度。以下是常见的几种方法: 组件化开发 将功能拆分为独立的 Vue 组件,每个组件包含自己的模板、逻辑和样…

前段vue如何实现

前段vue如何实现

Vue 前端实现方法 Vue 是一款流行的前端框架,用于构建用户界面。以下是一些常见的 Vue 实现方法: 组件化开发 Vue 的核心思想是组件化开发。每个组件可以独立封装逻辑、模板和样式,便于复用…

elementui路由

elementui路由

使用Element UI与Vue Router集成 Element UI是一个基于Vue.js的组件库,与Vue Router可以无缝集成。通过Vue Router管理路由,结合Element UI的…