微信小程序 修改/使用上一个页面的data数据及方法 getCurrentPages()获取页面栈的使用 常见页面展示

2022-12-13 18:37:55 浏览数 (1)

今天讲一个 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实例

0 人点赞