目标:想要某个页面在历史中(页面栈)只显示一次
什么是页面栈:
在小程序开发中,页面栈是指小程序当前打开的页面的层级关系堆栈。每当打开一个新页面时,它会被放置在页面栈的顶部,而当前页面就位于栈的最顶层。通过调用`getCurrentPages()`方法,可以获取到当前页面栈的信息,包括每个页面的路由、数据等。
页面栈的结构遵循后进先出(LIFO)的原则,也就是说,最后一个进入页面栈的页面最先被关闭。当用户或开发者执行页面跳转操作时,会影响页面栈的层级关系,例如打开新页面、关闭当前页面、返回上一页等。
利用页面栈,可以实现一些常见的页面操作,如返回上一页、跳转至指定页面、获取前一页面的数据等。通过`getCurrentPages()`可以获取到页面栈的数组对象,数组的第一个元素是首页,最后一个元素是当前页面。
需要注意的是,在小程序中,页面栈有一定的限制。小程序的页面栈最大深度默认为10,即最多可以同时打开10个页面。超过这个数量时,最早打开的页面会被自动关闭,以保持页面栈的深度不超过限制。
在这里,我获取页面栈只是为了确定使用的方法是否如我所想,接下来解决这个问题:
在点击确定时,跳转返回列表页,于是我开始使用了第一个方法
uni.navigateTo,但是此方法并不尽人意,这种页面跳转,也是比较平常的页面跳转,可携带参数,但是频繁筛选页面栈很容易满,导致按钮失效。
于是开始了第二个方法,在点击确定时采用uni.redirectTo
这个方法的作用是关闭当前页面,跳转到应用内的某个页面。似乎满足了我的要求,但是每次点返回,都是列表一层一层的返回,我只需要最新的列表,这个方法可行,但并不能只在筛选页确定这里使用这个方法。所以同理在点击筛选按钮路由跳转时也要使用这个方法。
如何证明在这个功能里我频繁的进行路由切换,页面栈里只有两个,最新页面(筛选和列表)
这个方法可以验证是否获取的一直是最新的页面。
let pages = getCurrentPages(); //当前页面栈
console.log('页面栈',pages)