收藏
回答

微信小程序中【自定义顶部导航栏】页面栈超过【10层】之后无法打开其他页面

问题模块 框架类型 问题类型 终端类型 微信版本 基础库版本
框架 小程序 Bug 工具 6.7.3 && 6.7.4 && 7.0.0 2.4.3

- 当前 Bug 的表现(可附上截图)

该小程序没有底部tab栏,所有首页也用navigateTo跳的;顶部栏有效操作按钮有两个,一个是返回按钮,一个是回到首页按钮


- 预期表现

点击返回保持正常返回逻辑,即a到b到c,c点击返回可以回到b;点击回到首页可以回到首页


- 复现路径

一直增加页面栈到10个就会复现


- 提供一个最简复现 Demo

(见代码片段链接)


- 个人想法

1.本地保存一套数组,模拟页面栈,返回等操作都用redirectTo跳转

2.尽量少的向页面栈中添加新页面,每次打开新页面,如果该页面不需要重新加载,去现有页面栈中找到已有页面,算步长,回退回去,但是会有返回逻辑混乱的bug

3.听听大佬们的意见和做法🤔🤔🤔

补充一个例子🤔现在情况是这样的,比如我在首页跳A再跳B再跳C,之后C页面点首页,因为用的是navigateTo,这样页面栈就又把首页加进去了,之后在首页的操作就又都会向页面栈中添加元素🤔

回答关注问题邀请回答
收藏

5 个回答

  • var 友原
    var 友原
    2019-01-03

    navigateBack回退,还有个参数是可以设置回退多少层的,至于你说的页面混乱,如果頕页面需要返回不同的页面时,可以在进入页面时设置一个变量来区分返回哪个页面

    2019-01-03
    赞同 1
    回复 1
    • 根根
      根根
      2019-01-03

      是这样的,比如,假设a是首页,a -> b -> c -> d, 在d页面点击返回首页应该是回a,之后如果算出回退步长,再记下是从d页面返回的首页,这样是可以做到,在首页a点击返回会回到d页面。但是,这时候如果再点击返回时呢?页面栈因为用了navigateBack已经pop出不少了,难道要在d页面返回a的时候记下当前栈所有状态吗?那还不如自己维护个数组好吧。不知道我说没说清楚

      2019-01-03
      回复
  • ==
    ==
    2019-01-03

    这不是bug把!,你这页面栈满了肯定跳不了其他页面了呀!

    2019-01-03
    赞同 1
    回复 5
    • 根根
      根根
      2019-01-03

      那有什么好一些的解决办法呢

      2019-01-03
      回复
    • ==
      ==
      2019-01-03回复根根

      你回到首页可以relaunch啊还有一些跳转可以用回退navigateBack啥的,,

      2019-01-03
      回复
    • ==
      ==
      2019-01-03回复根根

      跳转又不是只有navigateTo

      2019-01-03
      回复
    • 根根
      根根
      2019-01-03

      但是这样怎么维护正常的返回逻辑呢?我想法2里也写过类似的想法

      2019-01-03
      回复
    • ==
      ==
      2019-01-03回复根根

      这个得按你的产品逻辑去走!具体情况需要你去考量

      2019-01-03
      回复
  • 天道
    天道
    2019-01-04

    如果你不想被页面栈问题所困扰 建议使用relLaunch   关闭所有页面,打开到应用内的某个页面

    2019-01-04
    赞同
    回复 1
    • hyong
      hyong
      2019-10-11
      粗暴
      2019-10-11
      回复
  • 浴火小青春
    浴火小青春
    2019-01-03

    页面栈最多10层,可以在路由跳转前判断下当前页面栈的数量,如果超出一定的数量,则由

    wx.navigateTo

    改为

    wx.redirectTo

    const config = {
        maxPageStackTotal: 7
    }
    const isBeyondPageStackLimit = getCurrentPages().length >= config.maxPageStackTotal;
     
    if(isBeyondPageStackLimit) {
        wx.redirectTo({
            url,
            success() {
     
            }
        })
    }else{
        wx.redirectTo({
            url,
            success() {
                 
            }
        })
    }


    2019-01-03
    赞同
    回复
  • 蹦叉叉蹦叉叉蹦叉叉蹦叉叉蹦叉叉名
    蹦叉叉蹦叉叉蹦叉叉蹦叉叉蹦叉叉名
    2019-01-03

    这个就相当于,一个桶只能放10个饼,装满了除非拿出几个或者全部倒了,不然就装不下更多的饼了

    2019-01-03
    赞同
    回复 2
    • 根根
      根根
      2019-01-03

      是啊,那有什么好一些的解决办法呢,或者说怎么处理这种情况会好一些呢

      2019-01-03
      回复
    • 蹦叉叉蹦叉叉蹦叉叉蹦叉叉蹦叉叉名
      蹦叉叉蹦叉叉蹦叉叉蹦叉叉蹦叉叉名
      2019-01-03回复根根

      这个得按实际情况来, 如果返回无关紧要,可以清空堆栈。或者尝试下用一个全局数组来存路由,这个相当复杂

      2019-01-03
      回复
登录 后发表内容