一、wx.navigateTo跟uni.redirectTo方法跳转比较
1、过程:A->(wx.navigateTo)->B-(wx.redirectTo)->C
解析:
A -> B通过 wx.navigateTo 跳转
B -> C 通过 wx.redirectTo 跳转.跳转触发后 B 页面就会被销毁, C 页面再返回 wx.navigateBack 就会直接到 A 了
2、过程:A ->(wx.navigateTo)-> B->(wx.navigateTo) -> C 返回效果C -> B -> A
正常 A -> B -> C 都是通过 wx.navigateTo 跳转的,所以 wx.navigateBack 只能返回上一界面
二、详细解析wx.navigateTo跟wx.navigateBack跳转页面栈关系
1、过程:A-(navigateTo)->B-(navigateTo)->C
解析:
A-(navigateTo)->B 这个时候B页面的页面堆栈为[A,B]
B-(navigateTo)->C 这个时候B页面的页面堆栈为[A,B,C]
合起来:A-(navigateTo)->B-(navigateTo)->C 页面堆栈为[A,B,C]
2、过程:C-(navigateBack)->B-(navigateBack)->A
解析:
C-(navigateBack)->B 这个时候B页面的页面堆栈为[A,B]
B-(navigateTo)->A 这个时候B页面的页面堆栈为[A]
合起来:C-(navigateBack)->B-(navigateBack)->A 页面堆栈为[A]
三、总结
1、wx.navigateTo 不会将旧页面出栈,会将新页面入栈。(栈内元素个数增加,栈内元素10个时,不能再跳转)
2、wx.redirectTo 会将栈顶的旧页面出栈(跳转会销毁当前页面栈),再将需要跳转到的页面入栈(栈内元素个数不变);
3、wx.navigateBack 则是将页面栈最后一个元素出栈,因此倒数第二个元素会成为最后一个元素,即变成当前页面;
也可以连续出栈好几个元素(大于栈内元素的个数则返回首页)返回栈中的某个页面。
4、wx.switchTab跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
5、wx.reLaunch,关闭所有页面,打开到应用内的某个页面
6、我们可以通过使用getCurrentPages()方法获取当前页面信息栈,从而进行学习总结运用
提醒:我们在做项目的时候,巧妙运用路由跳转和页面栈会节省很多代码,用户体验也会得到相应的提升,所以,在开始项目之前,定好页面跳转规则相当重要。