在小程序中所有页面的路由全部由框架进行管理。
框架以栈的形式维护了当前的所有页面。当发生路由切换的时候,页面栈的表现如下:
路由方式 | 页面栈表现 |
---|---|
初始化 | 新页面入栈 |
打开新页面 | 新页面入栈 |
页面重定向 | 当前页面出栈,新页面入栈 |
页面返回 | 页面不断出栈,直到目标返回页,新页面入栈 |
tab 切换 | 页面全部出栈,只留下新的 tab 页面 |
重加载 | 页面全部出栈,只留下新的页面 |
getcurrentpages()
函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。
tip:不要尝试修改页面栈,会导致路由以及页面状态错误。
对于路由的触发方式以及页面生命周期函数如下:
路由方式 | 触发时机 | 路由前页面 | 路由后页面 |
---|---|---|---|
初始化 | 小程序打开的第一个页面 | onload, onshow | |
打开新页面 | 调用 api wx.navigateto 或使用组件 <navigator open-type="navigateto"/> | onhide | onload, onshow |
页面重定向 | 调用 api wx.redirectto 或使用组件 <navigator open-type="redirectto"/> | onunload | onload, onshow |
页面返回 | 调用 api wx.navigateback 或使用组件<navigator open-type="navigateback"> 或用户按左上角返回按钮 | onunload | onshow |
tab 切换 | 调用 api wx.switchtab 或使用组件 <navigator open-type="switchtab"/> 或用户切换 tab | 各种情况请参考下表 | |
重启动 | 调用 api wx.relaunch 或使用组件 <navigator open-type="relaunch"/> | onunload | onload, onshow |
tab 切换对应的生命周期(以 a、b 页面为 tabbar 页面,c 是从 a 页面打开的页面,d 页面是从 c 页面打开的页面为例):
当前页面 | 路由后页面 | 触发的生命周期(按顺序) |
---|---|---|
a | a | nothing happend |
a | b | a.onhide(), b.onload(), b.onshow() |
a | b(再次打开) | a.onhide(), b.onshow() |
c | a | c.onunload(), a.onshow() |
c | b | c.onunload(), b.onload(), b.onshow() |
d | b | d.onunload(), c.onunload(), b.onload(), b.onshow() |
d(从转发进入) | a | d.onunload(), a.onload(), a.onshow() |
d(从转发进入) | b | d.onunload(), b.onload(), b.onshow() |
tips:
navigateto
,redirectto
只能打开非 tabbar 页面。switchtab
只能打开 tabbar 页面。relaunch
可以打开任意页面。onload
中获取。