今天在开发小程序时遇到一个问题,关于wx.navigateTo的events与wx.redirectTo;暂时还没想到原因,猜测是异步执行的问题;
需求描述:在页面1有一个弹窗,点击弹窗里的按钮跳转到页面2,在页面2点击一个按钮到页面3,需要实现,当点击页面2的按钮去到页面3时,从页面3直接返回回到页面1,并且将页面1的弹窗关闭;
步骤1:涉及到返回跨页面,所以页面2到页面3,用wx.redirectTo(关闭当前页面,跳转到应用内的某个页面);页面2被移出栈,所以从页面3返回就能直接返回到页面1了;
步骤2:再来实现关闭页面1的弹窗:当页面2发生了跳转页面3时,要通知页面1去关闭弹窗,这时页面1跳转页面2就可以使用wx.navigateTo(保留当前页面,跳转到应用内的某个页面)的events来实现;wx.navigateTo的events可以和被打开页面进行通信;
// 页面1
wx.navigateTo({
url: `/retail/pages/my/clock/shopclock/index`,
events: {
refresh: function (data) {
console.log('在这里执行关闭弹窗')
}
},
})
// 页面2
let eventChannel = this.getOpenerEventChannel()
if(eventChannel && eventChannel.emit){
eventChannel.emit('refresh',{});
}
wx.redirectTo({
url: `页面3`,
})
好的,打工告成;
你是不是以为这样就结束了;
并没有,这时候发现页面1到页面2,页面3到页面3,页面3返回,是回到页面1了,但是弹窗并没有关闭;
算了,今天就到这吧,没找到原因;
换了另一个方式来实现这个功能;
在小程序里定一个全局的字段,点击页面2到页面3的按钮之后给这个字段赋值;返回到页面1时判断一下这个字段是否有值;就好了;