页面|组件的强制跳转

封装

utils/mustbeLogin.js 封装强制登录跳转的工具函数,实现登录后返回原来页面的功能,利用globalData存储是否需要返回原来页面的标志

  1. //prevRoute 当前路由path
  2. //isGoBack 是否需要返回上一页的状态
  3. //detailsId 商品的id 由需要的页面提前存储
  4. export default ()=>{
  5. let token = wx.getStorageSync('token')
  6. if(!token){
  7. //提示
  8. wx.showToast({
  9. title: '请先登录!',
  10. mask: true,
  11. icon: 'none'
  12. })
  13. // 获取当前页面栈
  14. let pages=getCurrentPages();
  15. // 获取之前路由
  16. let prevRoute = pages[pages.length-1].route;
  17. //如果是明细页面 则附带上商品id
  18. if(prevRoute === "pages/details/details"){
  19. prevRoute+=`?id=${getApp().globalData.detailsId}`
  20. }
  21. // 当前路由地址保存到全局
  22. getApp().globalData.prevRoute="/"+prevRoute;
  23. // 设置需要返回上一页
  24. getApp().globalData.isGoBack = true
  25. //跳转到用户
  26. setTimeout(()=>{
  27. wx.switchTab({
  28. url:'/pages/user/user',
  29. })
  30. },1500)
  31. return true
  32. }
  33. return false
  34. }

调用

组件调用, 如果未登录则返回false,mustbeLogin方法设定跳转到用户页面

  1. import mustbeLogin from '../../utils/mustbeLogin'
  2. //去购物车
  3. goToCartPage(){
  4. // 强制登录的判断
  5. if(mustbeLogin()){
  6. return
  7. }
  8. wx.switchTab({
  9. url:'/pages/cart/cart',
  10. })
  11. },

tabbar页面的强制跳转

封装

custom-tab-bar/index.js 自定义tabbar组件 :针对自定义的tabbar不能使用navigate的相关操作,利用globalData存储是否是来自自定义tabbar的跳转,从而区分返回原来页面是tabbar的切换还是普通页面的跳转

  1. //prevRoute 当前路由path
  2. //isGoBack 是否需要返回上一页的状态
  3. //isComeFromTabbar 是否从tabbar页面过来的
  4. Component({
  5. data:{
  6. tabbarArr:[{
  7. pagePath: "/pages/cart/cart",
  8. text: "购物车",
  9. icon: 'cart-o'
  10. },...]
  11. },
  12. methods:{
  13. onChange(event) {
  14. // event.detail 的值为当前选中项的索引
  15. // 是否去购物车(购物车需要用户登录(token)并且返回上一页)
  16. if(this.data.tabbarArr[event.detail].pagePath === '/pages/cart/cart'){
  17. let token = wx.getStorageSync('token')
  18. //未登录
  19. if(!token){
  20. //也保存这个路径
  21. //如果跳到购物车,未登录的话是需要登录后返回上一页,所以设置全局路径
  22. getApp().globalData.prevRoute="/pages/cart/cart";
  23. getApp().globalData.isGoBack=true;
  24. getApp().globalData.isComeFromTabbar=true;//让用户点击购物车后登录能跳回购物车
  25. //提示
  26. wx.showToast({
  27. title: '请先登录',
  28. });
  29. //跳转到用户页
  30. setTimeout(()=>{
  31. wx.switchTab({
  32. url: '/pages/user/user',
  33. })
  34. },1500)
  35. return
  36. }
  37. }else{
  38. //来到tabbar的切换的时候,除了点击购物车,其他情况都不用返回上一页
  39. getApp().globalData.isGoBack=false;
  40. }
  41. //不是去购物车的跨域随意跳转
  42. wx.switchTab({
  43. url: this.data.tabbarArr[event.detail].pagePath,
  44. })
  45. },
  46. }
  47. })

调用

user.js 用户登录后需要跳转到上一页 1.根据isGoBack决定是否跳 2.根据isComeFromTabbar决定用什么方法

  1. async loginSubmit(){
  2. // 登录成功后:
  3. // 1、提示登录成功
  4. // 2、保存token和userInfo到localStorage
  5. // 3、隐藏登录窗口
  6. // 4、页面上用户信息的更新
  7. // 5、跳转到上一级路由
  8. //判断是否需要跳
  9. if(getApp().globalData.isGoBack){
  10. //判断是否是tabbar跳转用switchTab
  11. if(getApp().globalData.isComeFromTabbar){
  12. wx.switchTab({
  13. url:getApp().globalData.prevRoute,
  14. })
  15. // 重置状态
  16. getApp().globalData.isComeFromTabbar=false
  17. }else{// 不是tabbar跳转过来的用navigateTo
  18. wx.navigateTo({
  19. url:getApp().globalData.prevRoute,
  20. })
  21. }
  22. // 重置状态
  23. getApp().globalData.isGoBack=false
  24. }
  25. },1000)
  26. },