当前位置:首页 > VUE

vue导航守卫实现使用

2026-02-24 18:39:16VUE

全局前置守卫(beforeEach)

在 Vue Router 中,beforeEach 是最常用的全局前置守卫。它在路由跳转前触发,适用于权限验证、登录状态检查等场景。

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
  // to: 即将进入的目标路由对象
  // from: 当前导航正要离开的路由
  // next: 必须调用该方法来 resolve 这个钩子
  if (to.meta.requiresAuth && !isAuthenticated()) {
    next('/login')
  } else {
    next()
  }
})

路由独享守卫(beforeEnter)

可以在路由配置中直接定义 beforeEnter 守卫,仅对该路由生效。

vue导航守卫实现使用

const router = new VueRouter({
  routes: [
    {
      path: '/admin',
      component: Admin,
      beforeEnter: (to, from, next) => {
        if (!checkAdminRole()) {
          next('/forbidden')
        } else {
          next()
        }
      }
    }
  ]
})

组件内守卫

Vue 组件内可以定义以下导航守卫:

vue导航守卫实现使用

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave
export default {
  beforeRouteEnter(to, from, next) {
    // 不能访问组件实例 `this`
    next(vm => {
      // 通过 `vm` 访问组件实例
    })
  },

  beforeRouteUpdate(to, from, next) {
    // 当前路由改变但组件被复用时调用
    this.name = to.params.name
    next()
  },

  beforeRouteLeave(to, from, next) {
    if (this.hasUnsavedChanges) {
      if (confirm('有未保存的更改,确定离开?')) {
        next()
      } else {
        next(false)
      }
    } else {
      next()
    }
  }
}

全局后置钩子(afterEach)

全局后置钩子不会接受 next 函数,也不会改变导航本身,常用于页面访问统计等场景。

router.afterEach((to, from) => {
  sendToAnalytics(to.fullPath)
})

导航解析流程

完整的导航解析流程如下:

  1. 导航被触发
  2. 调用失活组件的 beforeRouteLeave
  3. 调用全局的 beforeEach
  4. 在重用的组件里调用 beforeRouteUpdate
  5. 调用路由配置里的 beforeEnter
  6. 解析异步路由组件
  7. 在被激活的组件里调用 beforeRouteEnter
  8. 调用全局的 afterEach
  9. 触发 DOM 更新

注意事项

  • 确保总是调用 next(),否则钩子不会被 resolved
  • beforeRouteEnter 是唯一支持给 next 传递回调的守卫
  • 后置钩子不会改变导航行为,仅用于辅助操作
  • 对于需要鉴权的路由,建议使用路由元信息(meta)配合全局守卫实现

标签: vue
分享给朋友:

相关文章

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue 方法实现

vue 方法实现

在 Vue 中,方法的实现通常通过 methods 选项完成。以下是 Vue 方法实现的核心要点和示例: 基本方法定义 在 Vue 组件中定义方法时,需将函数声明放在 methods 对象内。这些…

vue 实现blog

vue 实现blog

Vue 实现博客的基本步骤 使用 Vue 实现博客可以分为前端和后端两部分,前端使用 Vue.js 框架,后端可以选择 Node.js、Python 或其他服务端语言。以下是一个基于 Vue 的博客实…

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vue…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } },…

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@la…