有这样一个场景:如果你在登录之前输入了http://localhost:8080/oauth2-mgm-app/#/userManage,想进入userManage页面,但是由于没有登录,系统是不会让你进入这个页面,之后会被定向到login页面。但是在登录之后,认为你有这个权限了,就需要重新定向到userManage页面。大致流程图如图1所示:
图1 登录后跳转到未登录前指定页面流程图
在vue-route的官方文档里其实有给到过这个demo,官方文档链接在此:https://router.vuejs.org/zh/guide/advanced/meta.html。但是不是很符合我们的需求,于是稍加改动,先上代码,搭配流程图可能更容易理解:
router.beforeEach((to, from, next) => {
var asideMenuConfig = sessionStorage.getItem("asideMenuConfig");
// 验证当前路由所有的匹配中是否需要有登录验证的
if (to.matched.some(record => record.meta.requiresAuth)) {
// 这里可以将cookie里是否存有token作为验证是否登录的条件
// 请根据自身业务需要修改
// 本段代码根据是否有权限菜单作为是否登录依据
if (asideMenuConfig) {
//校验所跳路由是否在配置菜单中
if (asideMenuConfig.indexOf(to.path) != -1 || to.path == "/index" || to.path == "/login") {
if(sessionStorage.getItem('redirect')!=null){
var redirect=sessionStorage.getItem('redirect');
if(to.path == redirect){//解决next()无限循环
next()
}else{
next({
path: redirect
});
}
}else{
next();
}
} else {
next({
path: from.path
})
}
} else {
sessionStorage.setItem('redirect', to.fullPath);
next({
name: 'login'
})
}
} else {
next();
}
})
图2 asideMenuConfig
首先要在route.js定义路由(代码为节选):在路由元信息(meta字段)中添加一个对象,里面包含:requiresAuth(是否需要权限),title(子菜单名),parent(所属菜单名)
{
path: '/RoleManage',
name: 'RoleManage',
component: () => import("@/pages/UserManage/roleManage"),
meta: {
requiresAuth: true,
title: '角色管理',
parent:"用户管理"
}
},
有人是不是就想了,获取了登陆前保存的页面路径就可以直接跳转到目标页面了,即写成下列这种形式,但是此举会导致页面一直无限循环调用导航守卫。
if(sessionStorage.getItem('redirect')!=null){
var redirect=sessionStorage.getItem('redirect');
next({
path: redirect
});
}else{
next();
}
原因是一定要调用next()来 resolve 这个导航守卫钩子,但是next()有参数和无参数是不一样的,执行效果依赖next()的调用参数。
next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是confirmed(确认的)。
next()或者next({path:'/'})跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向next传递任意位置对象,且允许设置诸如repace:true、name:'home'之类的选项以及任何用在route-link的to prop或router.push中的选项。
注意:确保要调用next(),否则钩子就不会被 resolved。
来自:https://www.cnblogs.com/jdWu-d/p/12896194.html
现在为了提高网站的用户体验,如添加页面切换动画,减少页面加载,很多网站为此都采用了无刷新技术来加载页面内容。
Javascript刷新当前页面:history.go(0)、location.reload()、location=location、location.assign(location)、document.execCommand(Refresh)、location.replace(location)等,Javascript页面自动刷新、跳转,如每隔多少秒刷新一次页面.
window.location.href方式用于跳转到指定页面地址,location.replace将目前浏览器的地址替换掉,调用这个方法的网页,将不会被写入浏览记录。
wx.switchTab(Object object)这里的tabBar是底下的导航栏指定的页面,跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面;wx.reLaunch(Object object)基础库 1.1.0 开始支持,低版本需做兼容处理。
route-link是在html中静态定义的,也可以在代码中动态跳转:注意绝对不能写href=,这样执行click跳转后,又会执行href跳转到当前页面push也可以直接使用path:
Angular中每个页面的显示都需要三个要素:页面的代码,控制器和页面的URL;当要在同一个页面上呈现不同的视图时,这就需要配置路由啦;angular.js已经为我们封装了一个独立的路由工具ng-route;ng-route是靠URL来改变显示的视图的
最近做的移动端页面在请求成功后要跳转页面,通过location.href实现的跳转。但同事在测试时,安卓机可以成功跳转,苹果IOS确无法成功跳转。
在JavaScript中有好几种方法可以实现页面跳转,重定向到另一个网页,下面本篇文章就来给大家介绍一些使用JavaScript实现页面跳转的方法,希望对大家有所帮助。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!