首先应该在路由守卫那里应该把这个地址存起来。
我在项目中用的是在路由守卫那里把地址用localstorage存起来。
详细代码如下:
router.beforeEach((to, from, next) => {
let permission = {}
let role = JSON.parse(localStorage.getItem(‘role’));
for (let k in role) {
if (to.meta.pername == k) {
permission = role[k]
}
}
let token = localStorage.getItem(‘token’);
if (token) {
if (to.path == ‘/login’ || to.path == ‘/dashboard’) {
next()
} else {
if (permission.read) {
sessionStorage.setItem(‘fullPathUrl’, from.fullPath);
to.meta.permission = permission
// 有权限能正常请求页面的情况下加载loading
// 登陆页面与从详情返回不需要加载
if (to.path != “/login”) {
if (from.name != ‘detail’) {
window.showLoading()
}
}
next()
} else {
next(’/dashboard’)
}
}
}else{
if (to.path == ‘/login’ || to.path == ‘/dashboard’) {
next()
}else{
sessionStorage.setItem(‘fullPathUrl’, to.fullPath);
next({
path: ‘/login’,
query: {
fullPathUrl:to.fullPath
}
})
// next(’/login?fullPathUrl’ + to.fullPath)
}
}
})
我们登陆的时候都会做一些判断,这时候我们应该在路由守卫这里判断我们路由的跳转状态。
我们项目这里的需求是:第一个如果有token的时候我们就根据我们要去的路由做判断是否有权限进入这个页面,如果有权限就进入这个页面,如果没有的话就跳转到首页;
第二个需求就是假如在没有登陆过的情况下访问里面的链接那么让他跳转到登录页面,并且登录进去之后再回到这个链接的页面,这时候我们就需要存下这个地址(注意:这里使用localstorage存储好像存不起,使用的是sessionstorage存的,但是为了保险起见,我们使用的是在路由上带过去的),并且在登陆进去之后拿到这个地址再跳转过去。
在登录进来之后我们判断路由里面有没有这个地址,有就直接跳过去,没有就跳转首页。