我正在尝试将router.beforeEach
与localStorage
一起使用。如果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"
}
答案 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()
}
});