uniapp小程序登录之后返回跳转登录之前的页面
周zerlinda 时间:2022-08-30
1.通过页面栈返回
- let pages = getCurrentPages(); // 当前页面
- let beforePage = pages[pages.length - 2]; // 上一页
- setTimeout(()=>{
- uni.navigateBack({
- success: function() {
- beforePage.onLoad(); // 执行上一页的onLoad方法
- }
- })
- },1000)
bug:如果通过弹窗提醒未登录重复两次上一个页面还是登录页面,用户体验交互效果不太友好(其实只要控制好页面跳转不会出现多次跳转,这种方法很好)
2.直接返回上一页uni.navigateBack({ delta:1})
上述两种方法都有一定的缺陷
最好是把跳转之前的路径保存起来,在登录成功之后读取进行页面跳转逻辑判断
写了一个公共的js文件
- export function getRouter(){
- let pages=getCurrentPages();//获取加载的页面
- let currentPage = pages[pages.length -1];//获取当前页面的对象
- let url=currentPage.route;//当前页面url
- uni.setStorageSync('url',`${url}`)
- let options =currentPage.options;
- console.log("options: " + options);
- if(options){
- let urlParams=url+'?'
- for(let key in options){
- let value=options[key]
- urlParams+= key +'='+value+'&'
- }
- urlParams=urlParams.substring(0,urlParams.length-1);//去掉末尾的&
- uni.setStorageSync('url',`${urlParams}`)
- }
- }
在需要做登录跳转的文件引入上方js文件
例如首页
- import {getRouter} from '@/common/service/getUrl.js';
- onShow(){
- getRouter();
- }
登录成功处理(但是出现了返回页面有两层级相同的页面,页面跳转的时候用redirectTo,但是返回上一页的逻辑就不行了,若是本地没缓存直接返回首页)
-
- let url=uni.getStorageSync('url')
- //判断缓存中是否有url
- if(url){
- if(url=='pages/access/index/index'){
- uni.reLaunch({
- url:`/${url}`
- })
- }else if(url=='pages/access/mine/mine'){
- uni.reLaunch({
- url:`/${url}`
- })
- }else if(url=='pages/access/msg/msg'){
- uni.reLaunch({
- url:`/${url}`
- })
- }else{
- uni.redirectTo({
- url:`/${url}`
- })
- }
- }else{
- //let pages = getCurrentPages(); // 当前页面
- //let beforePage = pages[pages.length - 2]; // 上一页
- //setTimeout(()=>{
- //uni.navigateBack({
- //success: function() {
- //beforePage.onLoad(); // 执行上一页的onLoad方法
- // }
- //})
- //},1000)
- //直接返回首页
- uni.reLaunch({
- url:'/pages/access/index/index'
-
- })
- }
特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。