在微信小程序中,我们经常有操作上一个页面的情形。
例如某一个页面在请求数据前需要是登录状态,在登录页面登录完成后,要返回上一个页面,并且让该页面发送请求,渲染页面。此时,就需要在登录页面有一个能够操作上一个页面的抓手。
解决方案:借助 getCurrentPages API 获取上一个页面的实例,然后调用页面实例指定的方法即可。
A 页面:
Page({
data: {
id: xxx
},
onLoad: function (e) {
this.setData({
id: e.id
})
// 判断是否登录
if(isLogin){
this.catchDataAndRender()
} else {
this.navigateToLoginPage()
}
},
// 发送请求,获取数据并渲染视图
catchDataAndRender(){
let { id } = this.data
......
},
// 跳转到登录页
navigateToLoginPage(){}
})
B 登录页面:
Page({
data: {
},
// 登录
login(){
if(loginSuccess){
let pages = getCurrentPages()
if(pages.length == 1){
// 当前的页面栈只有登录页面,跳转到首页
wx.reLaunch({
url: '/pages/index/index'
});
} else {
// 从别的页面跳转过来的
let lastPage = pages[pages.length - 2]
let catchDataAndRender = lastPage.catchDataAndRender
if(catchDataAndRender){
catchDataAndRender()
}
wx.navigateBack();
}
}
}
})