需求描述:用户从A页面进入B页面,在B页面添加cases数据,success后自动返回A页面,并刷新A页面的数据
B页面添加数据的代码:
dbPainter.doc(id).update({
data:{
cases:_.unshift(exam),
},
success:res=>{
wx.showToast({
title: '上传成功',
duration:1000,
})
let pages = getCurrentPages;
let prePage = pages[pages.length - 2];
prePage.getCases();
setTimeout(() => {
wx.navigateBack({
delta:1,
})
},1000);
},
A页面获取数据的方法getCases:
getCases(){
let _id = this.data.id;
dbPainter.where({
_id,
}).limit(1).field({
cases:true,
}).get({
success:res=>{
this.setData({cases:res.data[0].cases})
}
})
},
在B页面success后调用了wx.navigateback返回到A页面,但失效,去掉刷新上一页面的方法getCases()后就能正常返回,但不是我想要的效果(就不能刷新数据了)。求解为什么
功能:A页面显示数据,B页面添加数据,
需求:B页面添加成功后,在success后获取页面栈,并调用A页面的方法
代码实现:
B页面:
success:res=>{ let pages = getCurrentPages();//获取当前页面栈 let prePage = pages[pages.length - 2];//获取上一页面对象 prePage.getCases(exam);//调用上一页面的getCases(),且传入参数 wx.navigateBack({ delta:1, }) }
B页面getCases()方法:
getCases(exam){ let cases = this.data.cases.unshift(exam); this.setData({cases}) },
在A页面用onShow是返回后调用的方法(有的场景这样做有点臃肿),这个我知道,我想实现的是在B页面还没有返回A页面时就刷新A页面的数据,即在B页面调用A页面的方法.
先已解决,在B页面的getCurrentPages少了个().
得看你A页面加载数据源的方法 是放在onLoad里面还是onShow里面了,可以看文档了解一下两者的区别