微信小程序路由跳转有个隐藏的坑,就是 wx.navigateTo
打开新页面,最多只能打开10个,超过10个之后就没反应,控制台也不会报错。
方案一:navigateTo
不行,用redirectTo
小程序路由跳转的方式有五种,分别是wx.navigateTo(打开新页面,新页面入栈)、wx.redirectTo(重定向,当前页面出栈,新页面入栈)、wx.navigateBack(返回,页面不断出栈,直到目标返回页)、wx.switchTab(切换tab页面,页面全部出栈,只留下新的 Tab 页面)、wx.reLaunch(页面全部出栈,只留下新的页面)
由此产生了第一种方式,当页面栈超过 10 时,直接用redirectTo。
方案二:维护自己的小程序页面栈
9层(含9层)以内时:走小程序自己的历史栈就ok了,跳转时候更新一下逻辑栈,这没啥可说的
从9层跳转10层:需要把第9层重定向到中转页,再由中转页跳转到10层
10层以后跳转:在navigateTo方法中处理,到10层之后,再跳转就第10层页面一直做redirectTo(重定向)操作了
10层以上返回:会返回到中转页,由中转页判断,具体返回到哪个页面,然后navigateTo(跳转)过去
从10层返回到9层:返回到中转页,将中转页redirectTo(重定向)到第9层页面
9层内的返回:直接返回就好了,返回时候不会更新逻辑栈,但没有关系,因为只有中转页才会用到逻辑栈
逻辑栈更新机制:
跳转、返回中转页时更新
navigateTo时更新
redirectTo时更新
reLaunch时更新
navigateBack时更新
小思路:失败的坑
本来想打算看看能不能当小程序页面栈超过十个以后就删除页面栈中的第一个,来以此循环,但是失败了