首页 小程序 uniapp小程序登录之后返回跳转登录之前的页面

uniapp小程序登录之后返回跳转登录之前的页面

1.通过页面栈返回

  1. let pages = getCurrentPages(); // 当前页面
  2. let beforePage = pages[pages.length - 2]; // 上一页
  3. setTimeout(()=>{
  4. uni.navigateBack({
  5. success: function() {
  6. beforePage.onLoad(); // 执行上一页的onLoad方法
  7. }
  8. })
  9. },1000)

bug:如果通过弹窗提醒未登录重复两次上一个页面还是登录页面,用户体验交互效果不太友好(其实只要控制好页面跳转不会出现多次跳转,这种方法很好)

2.直接返回上一页uni.navigateBack({ delta:1})

上述两种方法都有一定的缺陷

最好是把跳转之前的路径保存起来,在登录成功之后读取进行页面跳转逻辑判断

写了一个公共的js文件

  1. export function getRouter(){
  2. let pages=getCurrentPages();//获取加载的页面
  3. let currentPage = pages[pages.length -1];//获取当前页面的对象
  4. let url=currentPage.route;//当前页面url
  5. uni.setStorageSync('url',`${url}`)
  6. let options =currentPage.options;
  7. console.log("options: " + options);
  8. if(options){
  9. let urlParams=url+'?'
  10. for(let key in options){
  11. let value=options[key]
  12. urlParams+= key +'='+value+'&'
  13. }
  14. urlParams=urlParams.substring(0,urlParams.length-1);//去掉末尾的&
  15. uni.setStorageSync('url',`${urlParams}`)
  16. }
  17. }

在需要做登录跳转的文件引入上方js文件

例如首页

  1. import {getRouter} from '@/common/service/getUrl.js';
  2. onShow(){
  3. getRouter();
  4. }

登录成功处理(但是出现了返回页面有两层级相同的页面,页面跳转的时候用redirectTo,但是返回上一页的逻辑就不行了,若是本地没缓存直接返回首页)

  1. let url=uni.getStorageSync('url')
  2. //判断缓存中是否有url
  3. if(url){
  4. if(url=='pages/access/index/index'){
  5. uni.reLaunch({
  6. url:`/${url}`
  7. })
  8. }else if(url=='pages/access/mine/mine'){
  9. uni.reLaunch({
  10. url:`/${url}`
  11. })
  12. }else if(url=='pages/access/msg/msg'){
  13. uni.reLaunch({
  14. url:`/${url}`
  15. })
  16. }else{
  17. uni.redirectTo({
  18. url:`/${url}`
  19. })
  20. }
  21. }else{
  22. //let pages = getCurrentPages(); // 当前页面
  23. //let beforePage = pages[pages.length - 2]; // 上一页
  24. //setTimeout(()=>{
  25. //uni.navigateBack({
  26. //success: function() {
  27. //beforePage.onLoad(); // 执行上一页的onLoad方法
  28. // }
  29. //})
  30. //},1000)
  31. //直接返回首页
  32. uni.reLaunch({
  33. url:'/pages/access/index/index'
  34. })
  35. }
特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。