当前位置:首页 > VUE

vue如何实现路由拦截

2026-02-20 16:21:25VUE

vue 实现路由拦截的方法

Vue 中可以通过路由守卫(Navigation Guards)实现路由拦截,主要分为全局守卫、路由独享守卫和组件内守卫三种方式。

全局前置守卫

使用 router.beforeEach 可以在路由跳转前进行拦截,常用于权限验证或登录状态检查。

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

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isAuthenticated()) {
    next('/login')
  } else {
    next()
  }
})

路由独享守卫

在路由配置中直接定义 beforeEnter 守卫,仅对当前路由生效。

vue如何实现路由拦截

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

组件内守卫

在组件内部通过 beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave 实现拦截。

export default {
  beforeRouteEnter(to, from, next) {
    // 组件实例尚未创建,无法访问 `this`
    next(vm => {
      // 通过 `vm` 访问组件实例
    })
  },
  beforeRouteLeave(to, from, next) {
    // 离开路由时触发
    const answer = confirm('确定离开吗?')
    if (answer) next()
    else next(false)
  }
}

拦截逻辑常见场景

登录验证

检查用户是否登录,未登录则跳转到登录页。

vue如何实现路由拦截

router.beforeEach((to, from, next) => {
  const isPublic = to.matched.some(record => record.meta.public)
  const loggedIn = localStorage.getItem('user')

  if (!isPublic && !loggedIn) {
    return next('/login')
  }
  next()
})

权限控制

根据用户角色限制访问权限。

router.beforeEach((to, from, next) => {
  const requiredRole = to.meta.role
  const userRole = getUserRole()

  if (requiredRole && userRole !== requiredRole) {
    next('/forbidden')
  } else {
    next()
  }
})

页面离开确认

防止用户误操作导致数据丢失。

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

注意事项

  • 确保始终调用 next(),否则路由会卡住
  • 异步操作需在完成后再调用 next()
  • 组件内守卫无法访问 this 时,可通过 next(vm => {}) 回调获取实例

通过合理组合这些守卫,可以实现复杂的路由拦截逻辑,满足各种业务场景需求。

分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

vue如何实现曲线图

vue如何实现曲线图

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

vue如何实现滤镜

vue如何实现滤镜

Vue 实现滤镜的方法 在 Vue 中实现滤镜效果可以通过多种方式,以下是常见的几种方法: 使用 CSS filter 属性 通过 CSS 的 filter 属性可以直接为元素添加滤镜效果。在 Vu…

vue项目如何实现

vue项目如何实现

安装Vue.js 通过npm或yarn安装Vue.js。确保Node.js环境已配置完成。 npm install vue # 或 yarn add vue 创建Vue项目 使用Vue CLI工具快…

Vue实现路由监

Vue实现路由监

Vue 实现路由监听的方法 在 Vue 中可以通过多种方式实现路由监听,以下是常见的几种方法: 使用 watch 监听 $route 对象 通过 Vue 的 watch 功能可以监听 $route…

vue实现路由跳转

vue实现路由跳转

路由跳转的基本方法 在Vue中,路由跳转可以通过vue-router实现。vue-router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的路由跳转方式。 声明式导航…