1、问题描述
在「添加基金页面pages/addfund/main」添加完基金后,点击取消,会需要跳转到「基金页面pages/index/main」并且刷新出刚刚添加的基金
现在的问题是:
在微信开发者工具中操作时:添加完基金后,会跳转到「基金页面pages/index/main」并且刷新出刚刚添加的基金
在真机调试、预览时:在手机上操作添加完基金后,会跳转到「基金页面pages/index/main」但是不会自动刷新出刚刚添加的基金
2、相关代码以及原因分析
我们通过wx.switchTab跳转到「基金页面pages/index/main」,跳转成功后,通过getCurrentPages().pop()方法获取当前页面栈中的最后一个页面(正常来说,这个页面就是「基金页面pages/index/main」),然后调用page.onPullDownRefresh()刷新这个页面
wx.switchTab({ url: '/pages/index/main', success: function (e) { console.log("that.$mp",that.$mp) var page = getCurrentPages().pop(); console.log("page",page) if (page == undefined || page == null) return; page.onPullDownRefresh(); } })
我们在代码中通过语句console.log("page",page)打印了一下当前的page。
在微信开发者工具中打印结果如下:
在真机调试中打印结果如下:
从上面两张图可以看出,在微信开发者工具和真机调试中打印出的page里面的route是不一样的。
微信开发者工具上能刷新是因为这里的route是「基金页面pages/index/main」
真机调试中不能刷新是因为route是「添加基金页面pages/addfund/main」所有实际上刷新了「添加基金页面」,没刷新「基金页面」
3、问题分析以及解决
页面到「基金页面」并刷新是通过先从页面栈中获取到「基金页面pages/index/main」,再执行「基金页面」下的刷新页面方法。
要解决这个问题,我们需要先了解一下页面栈。
从【2、相关代码以及原因分析】展示的代码中,我们可以看到现在用的方法是wx.switchTab。那么正常的流程是跳转到「基金页面pages/index/main」页面成功后,页面栈会被清空,只留下「基金页面」这个Tab页。在微信开发者工具确实是这样的。但是在真机调试中,最后留下的页面是「添加基金页面pages/addfund/main」。应该是微信小程序的一个bug了吧。
我们的解决方案是将wx.switchTab换成wx.reLaunch。这样就正常了,像下面这样:
wx.reLaunch({ url: '/pages/index/main', success: function (e) { console.log("that.$mp",that.$mp) var page = getCurrentPages().pop(); console.log("page",page) if (page == undefined || page == null) return; page.onPullDownRefresh(); } })