微信小程序开发中,有一个跳转方式 :wx.switchTab,可把我坑惨了,一个bug改通宵,我们来揭秘一下wx.switchTab跳转方式会附带参数的问题!
我们先来说明一下wx.switchTab跳转方式的作用,根据官方的解释是这样的
url 说明路径后不能带参数,即使带了参数传过去也是拿不到值的,可是我为什么说通过wx.switchTab方式跳转能拿到参数呢,这里说的拿到参数并不是跳转过去拿到的参数,而是通过switchTab跳转之前就已经拿到参数了,我现在来说一种情况
现在有三个页面,分别为:
A页面(默认页面) B页面(底部导航页面) C页面(底部导航页面)
当我们启动小程序进入A页面,此时A页面不是底部导航页面,而是一个新开辟的页面,这个时候我们从A页面通过reLaunch跳转到B页面,此时此刻A页面是附带了参数传递到了B页面中,B页面的onLoad执行了,接收options参数,options拿到的是通过A页面传递过来的参数。
此时我们把小程序切换到后台,这里要注意,小程序并没有退出进程,只是切换到了后台,然后通过其它方式进入到了C页面,我这里是通过服务通知(模板消息)进入到C页面的,这个时候如果在C页面通过wx.switchTab跳转到B页面就会存在问题,B页面的onLoad被执行了,options会拿到参数。
这里要注意,我们是从C页面过来的,并没有传递任何参数,造成B页面会拿到参数的原因就是我们首次通过A页面进入B页面传递的参数并没有消失,一直附带在onLoad的options参数中,虽然onLoad被重新执行了,但是options还是原来A页面传过来的参数。
要解决从C页面跳转到B页面清理掉B页面onLoad中options的参数,就需要在C页面通过wx.reLaunch方式进行跳转,就会清理掉所有页面重新打开新的页面,底部导航是支持用wx.reLaunch方式进行跳转,这个时候所有参数都会被清理掉,onLoad也不会保留上一个页面跳转过来存在缓存的问题!
至今为止,微信要我们开发者填的坑还是蛮多的!
这里我推荐一个个人微信公众号"程序员小鸿",公众号是作者用于全栈技术分享,一位终身学习者!欢迎大家扫码关注!