首先我们了解一下路由的触发方式
- wx.navigateTo
保留当前页面,跳转到应用内的某个页面,但是不能跳到 tabbar 页面。使用wx.navigateBack 以返回到原页面。小程序中页面栈最多十层。
wx.navigateTo({
url: 'test?id=1',
success: function(res) {
//接口调用成功的回调函数
}
})
- wx.redirectTo
关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。
wx.redirectTo({
url: 'test?id=1'
})
- wx.navigateBack
关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。
getCurrentPages()
获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页面。
注意事项
不要尝试修改页面栈,会导致路由以及页面状态错误。
不要在 App.onLaunch
的时候调用 getCurrentPages()
,此时 page
还没有生成。
wx.navigateBack({
delta: 1,
success: function (e) {
var page = getCurrentPages().pop();
if (page == undefined || page == null) return;
page.onLoad(page.options);
}
})
对于不同的路由的触发方式触发不同的页面生命周期函数
打开新页面 | 调用 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 |
总结
navigateTo
,redirectTo
只能打开非 tabBar 页面。- 使用
navigateBack
只跳转回页面以后,只能触发onShow生命周期。 - 调用页面路由带的参数可以在目标页面的
onLoad
中获取。