路由方式 | 页面栈 |
---|---|
初始化 | 新页面入栈 |
打开新页面(wx.navigateTo({ url: '/pages/st_suggest/st_suggest' });) | 新页面入栈 |
页面重定向 (wx.redirectTo({url:'/pages/home/home'})) | 当前页面出栈,新页面入栈 |
页面返回(wx.navigateBack()) | 页面不断出栈,直到目标返回页,新页面入栈 |
Tab 切换(底部tab切换) | 页面全部出栈,只留下新的 Tab 页面 |
重加载 | 页面全部出栈,只留下新的页面 |
1. wx.navigateTo
页面最多5层,无法深入跳转。比如依次在每个页面调用wx.navigateTo
// 此处是A页面
wx.navigateTo({ // A -> B
url: 'B?id=1'
})
// 此处是B页面
wx.navigateTo({ // B -> C
url: 'C?id=2'
})
// 此处是C页面
wx.navigateTo({ // C -> D
url: 'D?id=3'
})
// 此处是D页面
wx.navigateTo({ // D -> E
url: 'E?id=4'
})
// 此处是E页面
wx.navigateTo({ // 页面E 不能跳转到 页面F
url: 'F?id=5'
})
此时想要从页面E跳转到 F ,则不会跳转过去,
解决方法,使用 wx.redirectTo(OBJECT)
方法重定向
// 此处是E页面
// 注意 调用前:此时页面的栈为 A-B-C-D-E
wx.redirectTo({
url: 'F?id=5'
}) // 注意 调用后:此时页面的栈为 A-B-C-D-F
也就是说,重定向操作是页面栈顶出栈替换当前栈顶。
重定向过去之后假如从页面F
跳转到页面G
的时候是不是能跳转过去呢?
// 此处是F页面
wx.navigateTo({ // 结果是不行的
url: 'G?id=6'
})
也是不行的,所以不管怎么,小程序页面栈中最多只能有5个。
那么,还有一种情况:在重定向后的页面F,使用 wx.navigateBack
回退一个页面,继续跳另外一个页面会是神马样子?
// 此处是F页面
// 调用前: A-B-C-D-F
// 调用后: A-B-C-D 页面回退到D
goBack: function (e) { //
wx.navigateBack({
delta: 1
})
}
// 此处是D页面
// 然后页面D调用
wx.navigateTo({ // 可以的
url: 'E?id=6'
})
答案是可以的:因为wx.navigateBack
执行后相当于页面出栈操作;此时页面栈中只有A-B-C-D 四个页面,所有还可以执行入栈(wx.navigateTo
)操作
总结:
小程序页面栈最多只能有五层.
- wx.navigateTo
是入栈操作
- wx.navigateBack
是出栈操作
- wx.redirectTo
是替换栈顶操作