小程序实现列表页跳转详情页,详情页操作数据后,列表做到不刷新同步数据

1,589 阅读2分钟

我们经常会有这种功能: 实现从列表页进入详情页,详情页进行某些操作,返回列表页,列表页要把详情页的操作同步到列表页,比如我们从活动列表进活动详情,在活动详情页点击了预约活动按钮,按钮变成已预约,并且活动库存-1,返回列表页按钮也要同步为已预约,库存-1;

具体功能清楚,先回忆下getCurrentPages()方法的返回值:

获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页面。

通过这个方法我们可以获取到来源页面的信息,包括来源页面的数据及方法,思路这不就来了:在详情页调用getCurrentPages()方法获取列表页数据方法,点击预约按钮时,同步调用列表页的预约方法:

let pages = getCurrentPages();
if (pages.length >= 2 && pages[pages.length - 2].route == "page/list/list") {
  //这里做个判断,如果上个页面为list页,才调用列表方法
  let preData = pages[pages.length - 2];
  let categoryId = 1001;
  //调用list方法更新数据,这里可以获取到list当前分页数,当前活动类别然后都传入方法
  preData.listGetData(categoryId)
}

其中listGetData()方法在list页中为获取列表数据接口:

//比如:
listGetData(id, page = 0, pageSize = 10){
    wx.request({
      url: "/getList",
      method: 'get',
      data:{
      id: id,
      page: page,
      pageSize: pageSize
      },
      success: res => {

      },
    })
}

我们还可以更方便,更节约时间,直接改变前端状态,不需要请求接口:

//专供详情页使用
listGetData(id) {
  this.data.List.map((v) => {
    if (v.id == id) {
      return v.collect = 1, v.favoriteCount+=1
    }
  })
  this.setData({
    List: this.data.List
  })
}

小程序可以获取到页面栈还是非常方便的,而且小程序有onShow()onLoad()生命周期特性,可以做到返回不请求数据,用户体验极佳;