一、页面栈的控制
官方规定小程序最多只能有 五个页面 同时存在,意思是在不关闭页面的情况,最多新开五个页面,页面深度为5。
但是目前一般来说,应用的业务场景和交互逻辑,远远不止5个页面栈。那如何用 五个页面 去实现更多复杂的流程呢?我们将从以下3个方面去进一步了解:
- 小程序的4种导航跳转方式
- 选择页面的跳转方式的选择
- 页面传参
1、小程序的4种导航跳转方式
wx.navigateTo:保留当前页面,跳转到新的页面,此时页面栈会加一个页面信息,此时页面栈数加一。
wx.redirectTo:关闭当前页面,跳转到指定页面,这里的关闭在页面栈里面是删除对应的页面信息,此时页面栈数减一。
wx.navigateBack:关闭当前页面,返回上一页面或多级页面。此时页面栈数减一。如果要跳转到指定页面,可以通过getCurrentPages()方法获取页面栈的长度,可以根据这个数跳转到指定页面。
wx.switchTab:跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面,这个是新出来的API,在我开发过程中没有提供此方法,不过用此方法跳转还是又一定限制,如果用页面栈里面将重新洗牌了。
2、选择页面的跳转方式的选择
对于可逆操作使用 wx.navigateTo,比如一级页面跳二级页面。
每新开一个页面,页面栈大小加一
对于不可逆操作使用 wx.redirectTo,比如登录页,登录成功后关闭登录页。

对于列表,还有介绍性等不常用的页面使用 wx.navigatrBack

3、页面传参
小程序页面之间的数据传输,放在Storage缓存里面,让每一个页面都能共享到相同数据。
比如:A页面和B页面,点击A页面的按钮进入B页面,然后在B页面选择日期后返回A页面,A页面要显示B页面选择的日期。
我们可以使用 wx.navigateTo + wx.navigateBack + onShow方式 来实现
(A页面 wx.navigateTo B页面。B页面 wx.navigateBack A页面,把日期setStorage到缓存里。然后在A页面的 onShow 方法里 重新加载数据)
二、事件对象
要注意 target 和 currentTarget 的使用。
target 触发事件的源组件。
currentTarget 事件绑定的当前组件。