vue-router中beforeEach中获取不到session storage

新手上路,请多包涵

是这样的,我通过localstorage跨标签页传递sesstion storage,
代码如下,网上copy的,其实需求是关闭标签页会清除登录态,而且新打开标签页的时候又不能让登录态失效。所以想到sesstion storage。但是这个有个副作用,就是通过a链接跳转和新打开一个标签页/或者输入url,结果是不一样的。新打开的标签页是获取不到session storage的,因此以下通过localstorage中转sesstion storage
`window.memoryStorage = {};
function isEmpty(o) {

for (var i in o) {
    return false;
}
return true;

};
if (isEmpty(memoryStorage)) {

localStorage.setItem('getSessionStorage', Date.now());

};
window.addEventListener('storage', function (event) {

// debugger;
if (event.key == 'getSessionStorage') {
    localStorage.setItem('sessionStorage', JSON.stringify(memoryStorage));
    localStorage.removeItem('sessionStorage');
    
} else if (event.key == 'sessionStorage' && isEmpty(memoryStorage)) {
    var data = JSON.parse(event.newValue),
    value;
    for (var key in data) {
        memoryStorage[key] = data[key];
    }
}

});`

以上代码放在main.js入口文件中,这都没什么问题,现在问题是下面
`
router.beforeEach((to, from, next) => {
if (to.path == '/login' || to.path == '/register' || to.path == '/error') { // 如果去的路径是登陆或注册就不判断有没有token。 是其他的路径 那么就判断他是否有token
} else {

  let token = sessionStorage.getItem('token')
  console.log("token", token)   
  //问题在这里,一旦通过新标签页进入路由,token为空,但是等页面加载完毕之后sesstion storage 中token是有值的,只是代码进到这里面来的时候,新打开的标签页里面是没有sesstion storage的,然后就自动跳回登录页面了
    router.push('/login')
    return
  } else {
    next()
    //有token就执行下一步
  }
}

}
next()//是登陆就执行下一步

})
`

怎么解决以上问题。

阅读 4.5k
1 个回答

要把逻辑重新理顺,代码建议重新上传一份,从现有代码看好像死循环了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题