当前位置:首页 > 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()
  }
})

页面离开确认

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

vue如何实现路由拦截

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

注意事项

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

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

分享给朋友:

相关文章

如何实现vue表格联动

如何实现vue表格联动

实现Vue表格联动的方法 使用Vue的响应式数据和计算属性 通过Vue的响应式数据特性,可以轻松实现表格之间的联动。定义一个共享的数据源,并在多个表格组件中使用这个数据源。利用计算属性对数据进行处理,…

vue路由实现iframe

vue路由实现iframe

Vue 路由实现 iframe 的方法 在 Vue 项目中,可以通过路由配置和组件的方式实现 iframe 的嵌入。以下是具体实现步骤: 创建 iframe 组件 新建一个 Vue 组件用于承载 i…

vue路由实现介绍

vue路由实现介绍

Vue 路由基础概念 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。它通过动态映射 URL 到组件,实现无刷新页面切换。核心功能包括: 嵌套路由:支持多…

java是如何实现跨平台的

java是如何实现跨平台的

Java 跨平台的实现原理 Java 实现跨平台的核心机制基于 “一次编写,到处运行” 的理念,主要通过以下技术实现: 字节码与 JVM Java 源代码编译后生成字节码(.class 文件),而非…

vue实现hash路由

vue实现hash路由

vue实现hash路由的基本原理 Vue实现hash路由主要依赖浏览器原生的hashchange事件和Vue的响应式系统。hash路由通过监听URL中#后面的变化来切换页面内容,无需向服务器发起请求。…

vue如何实现图

vue如何实现图

Vue 实现图表的方法 Vue 中实现图表可以通过多种方式,常见的有使用第三方库或自定义实现。以下是几种常见的方法: 使用 ECharts ECharts 是一个功能强大的图表库,支持多种图表类型。…