Vue JS(router.beforeEach)无法将异常转换为字符串

时间:2018-10-21 08:19:06

标签: vue.js vuejs2 vue-component vue-router

我正在尝试将router.beforeEachlocalStorage一起使用。如果localStorage中有数据,我想跳过主页。如果没有数据,请进入主页。我可以使用console.log打印数据,但是路由器处理失败

  

[vue-router]路线导航期间未捕获的错误>无法   将异常转换为字符串。

如何控制导航?

我的router.js

Vue.use(Router);

const router = new Router({
    routes: [{
            path: '/',
            name: 'index',
            components: {
                default: Index,
                header: MainNavbar
            },
            props: {
                header: {
                    colorOnScroll: 400
                }
            }
        },
        {
            path: '/landing',
            name: 'landing',
            components: {
                default: Landing,
                header: MainNavbar,
                footer: MainFooter
            },
            props: {
                header: {
                    colorOnScroll: 400
                },
                footer: {
                    backgroundColor: 'black'
                }
            }
        },
        {
            path: '/login',
            name: 'login',
            components: {
                default: Login,
                header: MainNavbar
            },
            props: {
                header: {
                    colorOnScroll: 400
                }
            }
        },
        {
            path: '/profile',
            name: 'profile',
            components: {
                default: Profile,
                header: MainNavbar,
                footer: MainFooter
            },
            props: {
                header: {
                    colorOnScroll: 400
                },
                footer: {
                    backgroundColor: 'black'
                }
            }
        }
    ],
    scrollBehavior: to => {
        if (to.hash) {
            return {
                selector: to.hash
            };
        } else {
            return {
                x: 0,
                y: 0
            };
        }
    }
});

router.beforeEach((to, from, next) => {
    let adres = JSON.parse(localStorage.getItem('adres'));
    if (!adres) {
        next('/');
    } else {
        next('/login');
    }
});

export default router;

本地数据示例:

{  
   "id":1,
   "adi":"Demo",
   "soyadi":"Sef",
   "telefon":"05322375277",
   "adres":"Girne Mahallesi 6022 Sk. No:22 Kahta/Adıyaman",
   "fotograf":"http://localhost:8000/media/kullanici/sef/demosef/chef-1.jpg"
}

1 个答案:

答案 0 :(得分:2)

您正在创建一个无限循环,一次又一次触发beforeEach后卫。在beforeEach中,它检查localStorage中是否有地址,然后重定向到//login。然后在输入新路由之前再次调用beforeEach,并检查是否存在地址并重定向。无限重复此过程。您需要在next()防护中的某处不带任何参数的情况下调用beforeEach来确认正常导航。所以你可能想做这样的事情..

router.beforeEach((to, from, next) => {
  if (to.path == '/') {  // If we are entering the homepage.
    let adres = JSON.parse(localStorage.getItem('adres'));
    if (!adres) {
      next();
    } else {
      next('/login');
    }
  } else {  // Not entering the homepage. Proceed as normal.
    next()
  }
});