当前位置:首页 > VUE

vue实现路由守卫

2026-03-08 02:23:30VUE

Vue 路由守卫的实现方法

Vue Router 提供了多种路由守卫(Navigation Guards),用于在路由跳转前后执行特定逻辑,例如权限验证、页面跳转拦截等。以下是常见的路由守卫实现方式:

全局前置守卫(beforeEach)

在路由跳转前执行,常用于登录验证或权限控制:

router.beforeEach((to, from, next) => {
  const isAuthenticated = checkAuth() // 自定义验证方法
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

全局解析守卫(beforeResolve)

在导航被确认前触发,适合获取数据或执行异步操作:

router.beforeResolve(async (to, from, next) => {
  try {
    await fetchData() // 异步操作
    next()
  } catch (error) {
    next('/error')
  }
})

全局后置钩子(afterEach)

路由跳转完成后触发,适合页面统计或日志记录:

router.afterEach((to, from) => {
  sendToAnalytics(to.fullPath) // 自定义统计方法
})

路由独享守卫(beforeEnter)

在单个路由配置中定义:

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

组件内守卫

在组件内部定义:

  • beforeRouteEnter:进入组件前调用
  • beforeRouteUpdate:路由变化但组件复用时调用
  • beforeRouteLeave:离开组件前调用
export default {
  beforeRouteEnter(to, from, next) {
    // 不能访问组件实例(this)
    next(vm => {
      // 通过vm访问组件实例
    })
  },
  beforeRouteUpdate(to, from, next) {
    // 可以访问this
    this.userData = null
    next()
  },
  beforeRouteLeave(to, from, next) {
    if (this.hasUnsavedChanges) {
      if (!confirm('确定离开?')) return next(false)
    }
    next()
  }
}

路由守卫执行顺序

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

路由元信息(meta)

可通过 meta 字段传递自定义信息:

vue实现路由守卫

const routes = [
  {
    path: '/profile',
    component: Profile,
    meta: { requiresAuth: true }
  }
]

在守卫中通过 to.meta 访问这些信息。

标签: 路由vue
分享给朋友:

相关文章

vue实现聊天

vue实现聊天

Vue实现聊天功能 基础项目结构搭建 使用Vue CLI或Vite创建项目,安装必要依赖如socket.io-client或axios(根据通信方式选择)。核心组件通常包括: ChatWindow.…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…

vue实现iframe

vue实现iframe

Vue 中实现 iframe 的方法 在 Vue 项目中,可以通过多种方式实现 iframe 的嵌入。以下是几种常见的方法: 使用原生 HTML iframe 标签 直接在 Vue 组件的模板中使用…

vue分类实现

vue分类实现

Vue分类实现方法 在Vue中实现分类功能通常涉及数据分组、动态渲染和交互逻辑。以下是几种常见的实现方式: 基于计算属性的分类 通过计算属性对原始数据进行分组处理,适合静态或少量数据分类: com…

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…