1.需求
现有两个页面A、B,需求是A页面需要B页面的的数据(差不多的情景就是一个列表,需要根据所属民族等的筛选,然后民族列表就放在了一个页面,需要再列表页跳到民族也,然后携带所属民族的id属性)。现有三个方法可以解决:
2.解决办法
- 把B页面所选择的id存在本地,在A页面onload的时候查询本地的数据,在A页面onUnload的时候清掉本地的数据,以防在其他页面进入A页面的时候判断出错
自我感觉这种方法很麻烦,判断的时候很麻烦
//B页面
binddetail(e) {
wx.setStorageSync(
'nationInfo',e.detail,
)
wx.navigateBack({
delta: 1
})
},
//A页面
onShow:function(){
//判断本地数据
var nation = {
}
nation = wx.getStorageSync('nationInfo')
console.log(nation, 'sync')
if (nation.id == '') {
x
x
x
x
x
}else{
x
x
x
x
}
},
//清掉本地数据
onUnload: function () {
wx.removeStorageSync('nationInfo')
},
- 在B页面判断上一页面的路由,然后选择完之后携带参数跳回上一页
这个方法我觉得其实很好用,但是假如A页面是tab页的话,redirected是不会执行的
onShow(){
let pages = getCurrentPages()
let currPage = null
if(pages.length){
currPage = pages[pages.length - 2]
}
let route = currPage.route
this.setData({
lastPage:route.slice(5)
})
console.log(this.data.lastPage)//得到上一页的路由
},
//带参数返回上一页
returnBack(e){
console.log(e)
var id = e.currentTarget.dataset.id
var eng = e.currentTarget.dataset.eng
var name = e.currentTarget.dataset.name
var img = e.currentTarget.dataset.img
wx.redirectTo({
//不想有历史记录就用redirected
url: `${
this.data.lastPage}?id=${
id}`,
})
}
- 第三种方法是百度得来的,是目前为止觉得最简单的方法。在返回上一页的方法里判断上一页路由,然后直接改变上一页的data值
returnBack(e){
console.log(e)
var id = e.currentTarget.dataset.id
var eng = e.currentTarget.dataset.eng
var name = e.currentTarget.dataset.name
var img = e.currentTarget.dataset.img
let pages = getCurrentPages(); //获取当前页面pages里的所有信息。
let prevPage = pages[pages.length - 2]; //prevPage 是获取上一个页面的js里面的pages的所有信息。-2 是上一个页面,-3是上上个页面以此类推。
prevPage.setData({
// 将我们想要传递的参数在这里直接setData。上个页面就会执行这里的操作。
nationId: e.currentTarget.dataset.id,
nationImg: e.currentTarget.dataset.img,
nationSubName: e.currentTarget.dataset.eng,
nationName: e.currentTarget.dataset.name
})
wx.navigateBack({
//直接back就好了,也不会计入历史记录
delta:1
})
},
这种方法的缺点是:返回到上一页之后只会执行onShow,不会实行onload,如果A页面的列表需要根据B页面的数据改变,那要在A页面的onShow里面清空列表,page归0之后再重新请求列表。这样做。按理说没啥问题,但是个人觉得在onShow里再次请求列表不是很好,因为加入A页面的列表页跳到详情页,详情页再返回到A列表页,那么A页面也会重新请求数据,列表页的位置也不是去详情页之前的位置了,而一般情况下这样是不需要重新请求数据的。所以,想来想去,还是觉得第二种方法靠谱。毕竟在详情页返回A页面的时候,不会携带参数,onload里面的方法不会执行,那列表页的位置还是之前的位置。
以上只是自己一个人的看法,欢迎大家批评指正!!!