微信小程序页面栈不能超过10层,所以使用wx.navigateTo()的时候需要注意是否会超过10个页面栈,给出对应的处理方法
处理方法一:使用wx.reLaunch() 代替 wx.navigateTo() 关闭所有页面跳转,一般用于自己做的tabbar组件跳转 直接把用到 wx.navigateTo替换为 wx.reLaunch
wx.navigateTo({
url:src,
success:function(res){
console.log(res)
},fail:function(err){
console.log(err)
}
})
处理方法二:可以在页面加载的时候就调用getCurrentPages() 监听当前页面栈的个数内容,判断当前页面栈中是否存在即将要跳转的页面路径,如果有,直接用 wx.navigateBack() 返回到该页面
const app=getApp()
Component({
properties: {
// 这里定义了innerText属性,属性值可以在组件使用时指定
innerText: {
type: String,
value: 'default value',
},
},
data: {
// 这里是一些组件内部数据
someData: {},
list:[
{img:"../../img/tab1.png",img2:"../../img/tabchoose1.png",name:"接听记录",src:"../../pages/record/index"},
{img:"../../img/tab2.png",img2:"../../img/tabchoose2.png",name:"设置",src:"../../pages/setting/index"},
{img:"../../img/tab3.png",img2:"../../img/tabchoose3.png",name:"我的",src:"../../pages/my/my"}
],
heightbom:false,
pages:[],
pagesLength:0
},
attached:function(params) {
//监听当前页面栈的个数内容
let pages=getCurrentPages()
let pagesLength=pages.length //当前页面栈的个数
this.setData({
pages,
pagesLength
})
},
methods: {
Pages(path){ //path即将要跳转的路径
let _this=this
let delta = -1
for (let i = 0; i < _this.data.pagesLength; i++) {
console.log(_this.data.pages[i])
if (_this.data.pages[i].is === path) { //判断当前页面栈中是否存在即将要跳转的页面路径
delta = i + 1 //delta代表当前要跳转的路径存在于页面栈的索引
}
}
return delta
},
// 这里是一个自定义方法
toPage: function(e){
let _this=this
let innerText=this.data.innerText
let src=e.currentTarget.dataset.src
let srcPage=src.split("../../")[1]
let index=e.currentTarget.dataset.index
let delta=_this.Pages(srcPage)
if(index==innerText){
return
}else{
if (delta > -1 ) {
console.log("有目标页已经是被访问过的"+delta)
// 如果有目标页已经是被访问过的
const backPage =_this.data.pages[_this.data.pagesLength - delta]
console.log(backPage)
// backPage.setData({data});
wx.navigateBack({
delta: _this.data.pagesLength - delta
})
} else {
console.log("没目标:"+delta)
wx.navigateTo({
url:src,
success:function(res){
console.log(res)
},fail:function(err){
console.log(err)
}
})
}
}
}
}
})
处理方法三:这个方法类似于方法一,可以在页面加载的时候就调用getCurrentPages() 监听当前页面栈的个数内容,在页面要跳转的时候,判断当前页面栈的个数是否超过10,如果超过10个,就给wx.reLaunch() 关闭所有页面,重新进行页面栈个数统计
let pages=getCurrentPages()
let pagesLength=pages.length //当前页面栈的个数
if(pagesLength>=10){
wx.reLaunch({
url:src,
success:function(res){
console.log(res)
},fail:function(err){
console.log(err)
}
})
}else{
wx.navigateTo({
url:src,
success:function(res){
console.log(res)
},fail:function(err){
console.log(err)
}
})
}