当前位置:首页 > 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 守卫,仅对当前路由生效。

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)
  }
}

拦截逻辑常见场景

登录验证

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

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 => {}) 回调获取实例

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

vue如何实现路由拦截

分享给朋友:

相关文章

js实现vue路由

js实现vue路由

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

Vue如何实现多级域名

Vue如何实现多级域名

Vue 实现多级域名的方法 Vue 本身是一个前端框架,多级域名的实现通常需要结合后端配置和前端路由。以下是几种常见的方法: 使用路由动态匹配 在 Vue Router 中可以通过动态路由参数匹配…

vue实现户籍系统路由实现

vue实现户籍系统路由实现

Vue 实现户籍系统路由方案 户籍系统通常涉及多层级页面和权限控制,以下是基于 Vue Router 的实现方案: 路由模块配置 在 src/router/index.js 中定义路由结构: co…

vue如何实现增删

vue如何实现增删

使用 Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是具体实现方法: 数据定义与初始化 在 Vue 组件的 data 选项中定义数组来存储需要操作的数据…

react路由如何配置

react路由如何配置

React 路由配置方法 安装 React Router 使用 npm 或 yarn 安装 React Router 的 DOM 版本: npm install react-router-dom…

如何实现语音react

如何实现语音react

语音识别基础设置 在React中实现语音识别功能通常需要借助浏览器的Web Speech API或第三方库。Web Speech API提供了SpeechRecognition接口,允许应用程序直接访…