当前位置:首页 > VUE

vue路由拦截怎么实现

2026-01-22 14:33:28VUE

Vue路由拦截的实现方法

在Vue中,可以通过路由守卫(Navigation Guards)来实现路由拦截,主要用于权限控制、登录验证等场景。

全局前置守卫

使用router.beforeEach注册全局前置守卫,在路由跳转前进行拦截:

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

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!auth.loggedIn()) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next()
  }
})

路由独享守卫

在路由配置中直接定义beforeEnter守卫:

vue路由拦截怎么实现

const router = new VueRouter({
  routes: [
    {
      path: '/dashboard',
      component: Dashboard,
      beforeEnter: (to, from, next) => {
        if (!store.getters.isAuthenticated) {
          next('/login')
        } else {
          next()
        }
      }
    }
  ]
})

组件内守卫

在组件内部使用beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave

export default {
  beforeRouteEnter(to, from, next) {
    // 不能获取组件实例`this`
    next(vm => {
      // 通过`vm`访问组件实例
    })
  },
  beforeRouteUpdate(to, from, next) {
    // 当前路由改变但组件被复用时调用
    next()
  },
  beforeRouteLeave(to, from, next) {
    // 导航离开该组件时调用
    if (confirm('确定要离开吗?')) {
      next()
    } else {
      next(false)
    }
  }
}

全局解析守卫

使用router.beforeResolve注册全局守卫,在导航被确认前调用:

vue路由拦截怎么实现

router.beforeResolve((to, from, next) => {
  // 适合获取数据或执行其他异步操作
  next()
})

全局后置钩子

使用router.afterEach注册全局后置钩子,不会改变导航本身:

router.afterEach((to, from) => {
  // 适合分析、更改页面标题等操作
  document.title = to.meta.title || '默认标题'
})

路由元信息

配合路由元信息meta可以更灵活地控制权限:

const router = new VueRouter({
  routes: [
    {
      path: '/admin',
      component: Admin,
      meta: { requiresAuth: true, roles: ['admin'] }
    }
  ]
})

动态添加路由

通过router.addRoutes动态添加路由实现权限过滤:

// 过滤有权限的路由
const accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
router.addRoutes(accessedRoutes)

以上方法可以单独使用或组合使用,根据项目需求选择最合适的实现方式。路由守卫的执行顺序为:全局前置守卫→路由独享守卫→组件内守卫→全局解析守卫→全局后置钩子。

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

相关文章

vue双向实现

vue双向实现

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过 v-model 指令实现,其核心是结合了数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。 数据…

vue实现录播播放

vue实现录播播放

Vue 实现录播播放 使用 video.js 实现 安装 video.js 和相关的 Vue 适配器: npm install video.js @videojs-player/vue 在 Vue…

vue表格重置怎么实现

vue表格重置怎么实现

重置表格数据的方法 在Vue中重置表格数据通常需要操作绑定的数据源,以下是几种常见实现方式: 直接重置数据源 // 假设表格绑定的是tableData this.tableData = [..…

vue实现一个系统

vue实现一个系统

Vue 系统实现步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目: npm init vue@latest my-system 选择需要的配置(Router、Pinia 等)。…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keywor…

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…