今天讲一个 getCurrentPages()的使用案例 getCurrentPages() 获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页面。
看到很多那种交叉页面传递值是用缓存或者是url带值 重新获取的
最常见的场景就是商城下单的时候进入下单页面 又需要去选择优惠券或者是去选择地址的时候 其实这种使用getCurrentPages()获取页面栈调用或者修改上一页的方法跟data就可以了
代码语言:javascript复制//页面B
click_address() {
let pages = getCurrentPages();// 获取页面栈
let current= pages[pages.length - 1]; // 当前页面
let url = current.route //当前页面url
let options = current.options //如果要获取url中所带的参数可以查看options
let prevpage= pages[pages.length - 2]// 上一个页面
let data = prevpage.data // 获取上一页data里的数据
if(prevpage){//存在上一页
prevpage.changeDataPageA('load');// 调用上一页的函数
prevpage.setData({address_id: id})// 修改上一页的数据
wx.navigateBack();// 返回上一页
}
}
代码语言:javascript复制 goOrder(e){
var id = e.currentTarget.dataset.id;
var pages = getCurrentPages();
var prevPage= pages[pages.length - 2];
if (prevPage) {
prevPage.setData({ address_id:id})
wx.navigateBack();
}
},
需要注意的就是:
不要尝试修改页面栈,会导致路由以及页面状态错误。
不要在 App.onLaunch 的时候调用 getCurrentPages,此时 page 还没有生成。
页面A必须使用 wx.navigateTo() 跳转到下一页面B,不能使用wx.redirectTo等其它的跳转方式,这样会关闭上一个页面,导致页面B无法获取上一页的Page实例