微信小程序wx.navigateBack返回上一页携带参数

需求

A页(列表页)B页 (新增表单页) 进行新增,当B页完成新增点击返回A页(列表页) 进行刷新。

注意

  • 如果B页使用wx.navigateTo,重新跳转回A页,理论上也是可以拿到参数什么之类的,但是使用微信小程序自带的返回按钮会出现路由紊乱,就是一直返回这几个页面。
  • 为什么不把获取列表方法getList()放在onShow生命周期中呢?这样无论什么方式进入页面都会刷新。这会有个问题。分页列表你一直滑,滑到下面某一处列表点击查看详情(假设当前pageNo: 5, pageSize: 10), 从详情页返回列表页会进行刷新 ,如果是pageNo : 1, pageSize: 10重新刷新无法记录滚动位置,又得重新往下滑,很明显不太对劲。如果是pageNo: 5, pageSize: 10再请求一次会变得有重复数据。因为本来当前pageNo: 5的时候已经concat数据了,当从详情页返回触发onShow生命周期里的getList(),原来的查询参数还是pageNo: 5, pageSize: 10相当于又concat了一次,变得重复。
  • 应该把获取列表方法写到onReady生命周期中,这样既可以记录原来滚动位置,也不会频繁调动接口,只有新增,或者删除 ,列表才要进行刷新操作

实现

在新增页调用接口新增成功后

var pages = getCurrentPages()
var prevPage = pages[pages.length - 2] //上一个页面
//直接调用上一个页面的setData()方法,把数据存到上一个页面中去
prevPage.setData({
  isAddBack: true
})
wx.navigateBack({
  delta: 1
})

前提是需要在列表页有这个参数,所以要在列表页的data加上去
在这里插入图片描述
在列表页onShow生命周期可以进行接收

	if (this.isAddBack) {
      this.onRefresh() // 刷新方法(pageNo: 1, pageSize: 10)
      this.setData({
        isAddBack: false
      })
    }

这里的意思就是每当列表页进入onShow这个生命周期就要进行判断页面是否是从新增页进行返回的,如果是就刷新列表,刷新完重置标志位,其它方式触发onShow将不会刷新列表
还有 另一种接收方法

var pages = getCurrentPages();
var currPage = pages[pages.length - 1]; //当前页面
let param = currPage.data.isAddBack;
console.log(param)//为传过来的值

照猫画虎即可。

要点

  1. getCurrentPages()这个函数获取页面栈
  2. onShow生命周期中获取参数,因为返回只能触发onShow生命周期

鸣谢

大佬思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值