vue-router beforeEach死循环

Posted 木石心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue-router beforeEach死循环相关的知识,希望对你有一定的参考价值。

vue中页面跳墙处理

页面跳墙中使用 vue-router中的 beforeEach的死循环问题

  • 问题展现
    ```
    import Router from ‘vue-router‘

const router = new Router({
{path: ‘/‘, component: index },
{path: ‘/login‘, component: login},
{path: ‘/error‘, component: error},
{path: ‘*‘, component: error}
})

router.beforeEach((to, from, next) => {
const isLogin = sessionStorage.getItem(‘loginData‘)
if (isLogin) {
next()
} else {
next(‘/error‘)
}
})

> 最近在使用时,一直陷入死循环,当时的想法是如何将路由提取出来,脱离`beforeEach`的控制,之后发现不可行。上面问题再现,会出现死循环,因为 `/error` 会在进入前 又要进入`beforeEach`中 ,这样就会一直循环下去
> 所以就是想如何跳出这个循环即可

router.beforeEach((to, from, next) => {
const isLogin = sessionStorage.getItem(‘loginData‘)
if (isLogin) {
next()
} else {
//next(‘/error‘)
if (to.path === ‘/error‘) { //这就是跳出循环的关键
next()
} else {
next(‘/error‘)
}
}
})
```

这样写,其实这个会执行两次,第二次进来是以/error的路由进来的

总结

  • 看文档也需要 实践哈

以上是关于vue-router beforeEach死循环的主要内容,如果未能解决你的问题,请参考以下文章

beforeEach钩子,next('/login') 跳转问题,无线循环导致Maximum call stack size exceeded问题

检查 vue-router.beforeEach 不限制对路由的访问

在 beforeEach 期间将 vuex 模块状态传递给 vue-router

Laravel 5.1 + Vue.js - vue-router beforeEach AuthService

vue-router 钩子函数 (beforeEach、afterEach、beforeEnter)

vue-router导航守卫(router.beforeEach())的使用