评论

wx.navigateTo ,跳转超过10次怎么点不动的解决办法。

wx.navigateTo

  1. 自定义一个跳转方法

思路:如果跳转的url是小程序页面栈已有的页面,则用wx.navigateBack的方式回退到那一层

wx.navigateBack相当于手动修改页面栈,将url后面的所有页面栈都删掉。



  goPage(url) {
        // 如果这个小程序,入口页面用的不多的话,可以忽略掉indexUrl,不做判断
        var indexUrl ="pages/index/index" // 小程序入口页面
        var page = getCurrentPages(); // 获取到小程序的页面栈
        var delta = -1; 


        // 如果要跳转的url是入口页面,并且页面栈大于2,用回退的方式,清除页面栈内容
        if(page.length>2 && indexUrl==url){
          
          for(var i=0;i<page.length;i++){
            if(url==page[i].route){ //入口页面的索引i
              delta = page.length - i -1   // 算出要回退几步回到 入口页面
              break
            }
          }
        }


        // 回退-1步的话,表示页面栈 里面没有首页
        if(delta==-1){
          wx.navigateTo({
            url: url
          })
        }else{
          wx.navigateBack({
            delta: delta
          })
        }
   
  }








其他优化方法:

  • 入口页面的写法:组建tabbar,首页和我的都写成组建的形式。

这种写法,在首页和我的页面切换的时候,不会使用wx.navigateTo ,不占用跳转的栈内存。



<home wx:if="{{PageCur=='0'}}" params="{{params}}" bind:changeTab="changeTab"></home>
<mine wx:if="{{PageCur=='1'}}"  params="{{params}}"></mine>

<tabbar id="tabbar"  tabNum="{{PageCur}}"  bind:clickFun="changeTab"></tabbar>




  • wx.redirectTo方法 代替 navigateTo 减少一层栈的使用,但是跳转的页面没有返回按钮。


最后一次编辑于  2021-09-29  
点赞 4
收藏
评论

3 个评论

  • milooooooooooooooUp
    milooooooooooooooUp
    2021-10-19

    有办法重写navigateTo的fail方法吗

    失败改用redirectTo尝试跳转

    已有的项目太多navigateTo了 改不过来

    2021-10-19
    赞同 1
    回复 1
    • LIYI
      LIYI
      2022-04-01
      这个想法好啊,试了直接重写wx.navigateTo = (url)=> {}吗
      2022-04-01
      回复
  • 阿白
    阿白
    2022-05-16

    思路一致 再加个判断tabbar页面就完美了


    2022-05-16
    赞同
    回复
  • 没事
    没事
    2021-11-10
    • wx.navigateTo,页面栈++直到=5
    • wx.redirectTo不影响
    • wx.navigateBack,页面栈--直到=1
    2021-11-10
    赞同
    回复
登录 后发表内容