wx.navigateTo ,跳转超过10次怎么点不动的解决办法。
发布于 3 年前 作者 baijie 3057 次浏览 来自 分享
  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 减少一层栈的使用,但是跳转的页面没有返回按钮。


1 回复

有办法重写navigateTo的fail方法吗

失败改用redirectTo尝试跳转

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

回到顶部