收藏
回答

getCurrentPages()不能表示tabBar页面的关闭情况

问题模块
教程反馈

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


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


   

最后一次编辑于  01-30  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

2 个回答

  • 城主
    城主
    02-18

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

    Tab页面不进页面栈

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

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


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

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

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

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


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

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

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

    02-18
    赞同
    回复
  • 的米
    的米
    02-22

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

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


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


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


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


    ------

    追加:

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

    02-22
    赞同
    回复