getCurrentPages()不能表示tabBar页面的关闭情况
发布于 6 年前 作者 mintao 6912 次浏览 来自 问答

     A页面调用wx.switchTab,跳转到B页面后,通过getCurrentPages()查看路由栈,发现没有A页面,但是从B页面返回到A页面时,A页面的状态能够保持(官方文档提到:“Tab 切换,页面全部出栈,只留下新的 Tab 页面)。  现在有几个问题:

1. getCurrentPages()是不是不能代表tabBar页面实际情况?尽管A页面已经从栈中移除,但是状态仍然是保留着的,仅仅是隐藏起来而已。
2. 是不是所有的tabBar页面共享一个webview?

   

2 回复

遇到同样的困惑,我本以为有 getCurrentPages() 的 API,应该也会有 getAllTabs() 之类的 API,结果找不着。

现在不知道如何去更新相关页面。

单一页面更新问题不大,但如果一处更新,会导致多页面更新,就不知道怎么处理了。在其中一个页面的 onShow() 中更新后,因为不确定其它页面是否也已经更新数据,而无法重置更新标志。这样会引起每次 onShow(),这个更新变量都未重置,会重入更新。

还有一种思路是,定义一个表格: [ { updateID: number; updateType: enum; updatedPages: page[] } ],每次更新追加一条,每个页面提取相关更新 updateType 记录,检查是否在 updatedPage 列表,如果不在,则进行更新处理,并追加本页到 updatedPages 列表。但这样有个回收问题,这个表格变得只增不减了。。。

不知道官方对这需求有没有优雅的解决方案。


追加:

今天想到另外一种解决方案,不用 getCurrentPages(),自己维护一个存活 Pages 的集合,onLoad 登记, onUnload() 移除,定义相关事件的 callback,产生事件后,遍历 pages,调用相应的 callback。

感觉这就是一个隐藏的坑啊

Tab页面不进页面栈

跳转之后回来不重新初始化页面,不执行onLoad

这样会导致tab页面共享的数据没有办法实时更新

例如四个页面都有一个授权按钮

如果在某个tab页面已经授权,其他tab页面点击按钮就不需要弹出授权了

但是由于无法通知其他tab页面导致,进入页面点击按钮按钮还是会授权

当然这个问题可以通过在onshow中实时同步数据,虽然有点问题,但是还是能解决

另外一个坑的例子就是四个tab页面都有消息通知,显示一个红点

在某个页面读过了这个消息,再跳到其他页面,这个红点不会消失

虽然也可以通过onshow去同步,但是这个红点会闪烁,而且延迟极高,体验特别差!!!!!

回到顶部