- 自定义一个跳转方法
思路:如果跳转的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 减少一层栈的使用,但是跳转的页面没有返回按钮。
有办法重写navigateTo的fail方法吗
失败改用redirectTo尝试跳转
已有的项目太多navigateTo了 改不过来
思路一致 再加个判断tabbar页面就完美了