千家信息网

怎么解决vue路由守卫及路由守卫无限循环问题

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"怎么解决vue路由守卫及路由守卫无限循环问题",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么解决vue路由守卫及路由守卫无限循环
千家信息网最后更新 2026年11月03日怎么解决vue路由守卫及路由守卫无限循环问题

这篇文章主要讲解了"怎么解决vue路由守卫及路由守卫无限循环问题",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么解决vue路由守卫及路由守卫无限循环问题"吧!

先贴一波官方文档的内容

const router = new VueRouter({ ... })router.beforeEach((to, from, next) => { // ...})

当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于 等待中。

每个守卫方法接收三个参数:

  • to: Route: 即将要进入的目标 路由对象

  • from: Route: 当前导航正要离开的路由

  • next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

    • next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

    • next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

    • next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。

    • next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。确保要调用 next 方法,否则钩子就不会被 resolved

然后这是我自己的总结

import Vue from 'vue'import Router from 'vue-router'import Login from '@/pages/login/Login'import Index from '../pages/index/Index'import Library from '../pages/library/Library'import Design from '../pages/design/Design'import Administration from '../pages/administration/Administration'import Production from '../pages/production/Production'import Global from '../common/global/Global'Vue.use(Router)const router = new Router({ routes: [ {  path: '/',  name: 'login',  component: Login }, {  path: '/index',  name: 'index',  component: Index }, {  path: '/library',  name: 'library',  component: Library }, {  path: '/design',  name: 'design',  component: Design }, {  path: '/administration',  name: 'administration',  component: Administration }, {  path: '/production',  name: 'production',  component: Production } ]})router.beforeEach ((to,from,next) => { //将所有需要登陆才显示的页面的路由都放进一个数组 const nextRoute = ['index', 'library', 'design', 'administration', 'production']; //获取登陆状态 let isLogin = Global.isLogin  if(to.name === 'login') { //如果是登录页,则跳过验证 next() //必不可少 return //以下的代码不执行 } if(nextRoute.indexOf(to.name) >= 0) { //判断该页面是否需要登陆 if(!isLogin) { //判断登陆状态  next({ name : 'login'}) //如果未登录,则跳转到登录页 } else {  next() //如果已经登陆,那就可以跳转 } } else { //其他的无需登陆的页面不做验证  next() } })export default router

这样就实现了全局路由守卫

关于路由守卫无限循环问题

如果你的代码是这样

 if(isLogin) { next() } else { next({ name: 'login')} }

这样的话就会陷入无限循环

因为你的 next({ name: 'login')} 是相当于一个路由跳转,它会再次触发全局路由守卫,你又进入了全局路由守卫进行再次判断,如此循环。

所以,想要结束路由守卫,整段代码的逻辑必须由 next() 进行结尾。比如像我上面写的,当需要进入登录页的时候,

 if(to.name === 'login') {  next()  return  }

加上这个判断,当你进入登录页的时候也会调用next() , 路由守卫进入确认状态,路由才会进行跳转。

感谢各位的阅读,以上就是"怎么解决vue路由守卫及路由守卫无限循环问题"的内容了,经过本文的学习后,相信大家对怎么解决vue路由守卫及路由守卫无限循环问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

路由 导航 循环 问题 登陆 登录 全局 方法 状态 钩子 代码 内容 参数 地址 页面 学习 验证 再次 对象 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技名片 蓝思科技飞鸽互联网 广州百单互联网科技有限公司 互联网公司 科技公司 融势互联网科技 天下捷融互联网科技 互联网科技股午盘股票涨跌 团飞科技与伯堂互联网服务平台 注册互联网科技公司经营范围大全 恒生互联网科技指数跳水 深圳市优智互联网科技有限公司 健康食品互联网创新科技园项目 佛山市拉法互联网科技有限公司 爱医互联网络科技 半导体是互联网高科技吗 本届互联网大会上的黑科技 工业互联网科技成果转化 郑州欣桑互联网科技有限公司 昆明中奇联合互联网科技 三亚科技创新互联网基地 互联网科技园 互联网金融 科技 掌上梦互联网科技 居家互联网科技有限公司 博兴的互联网电子科技公司 随着互联网科技发展 东营紫格互联网科技 九思连强互联网电子科技有限公司 广西科技产业互联网是什么 互联网金融金融科技
0