页面|组件的强制跳转
封装
utils/mustbeLogin.js 封装强制登录跳转的工具函数,实现登录后返回原来页面的功能,利用globalData存储是否需要返回原来页面的标志
//prevRoute 当前路由path//isGoBack 是否需要返回上一页的状态//detailsId 商品的id 由需要的页面提前存储export default ()=>{let token = wx.getStorageSync('token')if(!token){//提示wx.showToast({title: '请先登录!',mask: true,icon: 'none'})// 获取当前页面栈let pages=getCurrentPages();// 获取之前路由let prevRoute = pages[pages.length-1].route;//如果是明细页面 则附带上商品idif(prevRoute === "pages/details/details"){prevRoute+=`?id=${getApp().globalData.detailsId}`}// 当前路由地址保存到全局getApp().globalData.prevRoute="/"+prevRoute;// 设置需要返回上一页getApp().globalData.isGoBack = true//跳转到用户setTimeout(()=>{wx.switchTab({url:'/pages/user/user',})},1500)return true}return false}
调用
组件调用, 如果未登录则返回false,mustbeLogin方法设定跳转到用户页面
import mustbeLogin from '../../utils/mustbeLogin'//去购物车goToCartPage(){// 强制登录的判断if(mustbeLogin()){return}wx.switchTab({url:'/pages/cart/cart',})},
tabbar页面的强制跳转
封装
custom-tab-bar/index.js 自定义tabbar组件 :针对自定义的tabbar不能使用navigate的相关操作,利用globalData存储是否是来自自定义tabbar的跳转,从而区分返回原来页面是tabbar的切换还是普通页面的跳转
//prevRoute 当前路由path//isGoBack 是否需要返回上一页的状态//isComeFromTabbar 是否从tabbar页面过来的Component({data:{tabbarArr:[{pagePath: "/pages/cart/cart",text: "购物车",icon: 'cart-o'},...]},methods:{onChange(event) {// event.detail 的值为当前选中项的索引// 是否去购物车(购物车需要用户登录(token)并且返回上一页)if(this.data.tabbarArr[event.detail].pagePath === '/pages/cart/cart'){let token = wx.getStorageSync('token')//未登录if(!token){//也保存这个路径//如果跳到购物车,未登录的话是需要登录后返回上一页,所以设置全局路径getApp().globalData.prevRoute="/pages/cart/cart";getApp().globalData.isGoBack=true;getApp().globalData.isComeFromTabbar=true;//让用户点击购物车后登录能跳回购物车//提示wx.showToast({title: '请先登录',});//跳转到用户页setTimeout(()=>{wx.switchTab({url: '/pages/user/user',})},1500)return}}else{//来到tabbar的切换的时候,除了点击购物车,其他情况都不用返回上一页getApp().globalData.isGoBack=false;}//不是去购物车的跨域随意跳转wx.switchTab({url: this.data.tabbarArr[event.detail].pagePath,})},}})
调用
user.js 用户登录后需要跳转到上一页 1.根据isGoBack决定是否跳 2.根据isComeFromTabbar决定用什么方法
async loginSubmit(){// 登录成功后:// 1、提示登录成功// 2、保存token和userInfo到localStorage// 3、隐藏登录窗口// 4、页面上用户信息的更新// 5、跳转到上一级路由//判断是否需要跳if(getApp().globalData.isGoBack){//判断是否是tabbar跳转用switchTabif(getApp().globalData.isComeFromTabbar){wx.switchTab({url:getApp().globalData.prevRoute,})// 重置状态getApp().globalData.isComeFromTabbar=false}else{// 不是tabbar跳转过来的用navigateTowx.navigateTo({url:getApp().globalData.prevRoute,})}// 重置状态getApp().globalData.isGoBack=false}},1000)},
