微信小程序踩坑记录 — wx.navigateTo
先简单描述一下我的业务场景,我现在有两个页面,需要来回切换,如下图,点击搜索按钮进入搜索页面,搜索到内容后返回热门题目,做这个效果的时候我选择了wx.navigateTo这个接口,做完之后测试了几次之后都没问题,于是就安心的去睡大觉了!
接下来问题就来了,有一次自己多搜索了几次,发现突然不能跳转了,脑壳疼…,于是我刷新页面重新又搜索了几次,经过我的反复测试最终得出结论,发现页面只能跳转5次,5次过后就不能再通过wx.navigateTo进行页面跳转了,那这说明什么问题呢?说明微信小程序最多能进入5层页面栈,而每次通过wx.navigateTo进行页面跳转都会将该页面加入页面栈中。
好!问题发现了,接下来我们就来解决这个问题了。
比如,现在有两个页面分别为test1页面和test2页面,那么我们可以通过wx.navigateBack方法来避免这个问题,如果我们想要再这两个页面之间传递数据呢?这里使用了一种我不太常用的方法进行数据传输(当做是熟悉一下各种传值方式)。
//test1页面:
Page({
data:{
userName:""
},
getTest2Name(name){
this.setData({
userName:name
})
}
})
说明:
我需要将test2页面的页面名字传递到test1页面,我们可以先在test1页面定义一个方法。
getTest2Name方法即是用来获取test2页面的页面名字的。
//test2页面
Page({
data:{},
backtest1(){
var name = "test2";
//getCurrentPages获取上一个页面实例对象,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。
var pageArr = getCurrentPages();
if (pageArr.length > 1) {
//获取上一个页面实例对象
var prePage = pageArr[pagelist.length - 2];
//这里通过获取到的test1页面实例来调用其方法,并将数据传递给test1页面
prePage.getBackData(name);
wx.navigateBack({
//这里通过实例列表长度减去1返回上一个页面
delta: pageArr.length - 1
})
}
}
})
大功告成!