当前位置:首页 > 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);
});

导航解析流程

路由守卫的执行顺序为:

vue如何实现路由守卫

  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如何实现排序

实现数组排序 在Vue中可以通过计算属性或方法对数组进行排序。使用JavaScript的sort()方法结合Vue的响应式特性实现动态排序。 data() { return { item…

vue路由实现iframe

vue路由实现iframe

Vue 路由实现 iframe 的方法 在 Vue 项目中,可以通过路由配置和组件的方式实现 iframe 的嵌入。以下是具体实现步骤: 创建 iframe 组件 新建一个 Vue 组件用于承载 i…

前段vue如何实现

前段vue如何实现

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

vue如何实现高亮

vue如何实现高亮

实现文本高亮的方法 在Vue中实现文本高亮通常可以通过以下几种方式完成: 使用v-html指令结合字符串替换 通过将需要高亮的文本部分替换为HTML标签(如<span class="highl…

vue如何实现刷新

vue如何实现刷新

实现页面刷新的方法 在Vue中实现刷新功能可以通过以下几种方式实现: 使用location.reload() 直接调用浏览器的原生方法强制刷新整个页面: methods: { refreshP…