小程序返回上一页要携带当前页面的参数

1.需求

现有两个页面A、B,需求是A页面需要B页面的的数据(差不多的情景就是一个列表,需要根据所属民族等的筛选,然后民族列表就放在了一个页面,需要再列表页跳到民族也,然后携带所属民族的id属性)。现有三个方法可以解决:

2.解决办法

  1. 把B页面所选择的id存在本地,在A页面onload的时候查询本地的数据,在A页面onUnload的时候清掉本地的数据,以防在其他页面进入A页面的时候判断出错
    自我感觉这种方法很麻烦,判断的时候很麻烦
//B页面
binddetail(e) {
    
    
    wx.setStorageSync(
      'nationInfo',e.detail,
    )
    wx.navigateBack({
    
    
      delta: 1
    })
  },
//A页面
 onShow:function(){
    
    
    //判断本地数据
    var nation = {
    
    }
    nation = wx.getStorageSync('nationInfo')
    console.log(nation, 'sync')
    if (nation.id == '') {
    
    
      x
      x
      x
      x
      x
    }else{
    
    
	    x
	    x
	    x
	    x
    }
  },
  //清掉本地数据
  onUnload: function () {
    
    
    wx.removeStorageSync('nationInfo')
  },
  1. 在B页面判断上一页面的路由,然后选择完之后携带参数跳回上一页
    这个方法我觉得其实很好用,但是假如A页面是tab页的话,redirected是不会执行的
 onShow(){
    
    
    let pages = getCurrentPages()
    let currPage = null
    if(pages.length){
    
    
      currPage = pages[pages.length - 2]
    }
    let route = currPage.route
    this.setData({
    
    
      lastPage:route.slice(5)
    })
    console.log(this.data.lastPage)//得到上一页的路由
  },
//带参数返回上一页
returnBack(e){
    
    
    console.log(e)
    var id = e.currentTarget.dataset.id
    var eng = e.currentTarget.dataset.eng
    var name = e.currentTarget.dataset.name
    var img = e.currentTarget.dataset.img
    wx.redirectTo({
    
    //不想有历史记录就用redirected
      url: `${
      
      this.data.lastPage}?id=${
      
      id}`,
    })
}
  1. 第三种方法是百度得来的,是目前为止觉得最简单的方法。在返回上一页的方法里判断上一页路由,然后直接改变上一页的data值
returnBack(e){
    
    
    console.log(e)
    var id = e.currentTarget.dataset.id
    var eng = e.currentTarget.dataset.eng
    var name = e.currentTarget.dataset.name
    var img = e.currentTarget.dataset.img
    let pages = getCurrentPages(); //获取当前页面pages里的所有信息。
    let prevPage = pages[pages.length - 2]; //prevPage 是获取上一个页面的js里面的pages的所有信息。-2 是上一个页面,-3是上上个页面以此类推。                                                           
    prevPage.setData({
    
      // 将我们想要传递的参数在这里直接setData。上个页面就会执行这里的操作。
      nationId: e.currentTarget.dataset.id,
      nationImg: e.currentTarget.dataset.img,
      nationSubName: e.currentTarget.dataset.eng,
      nationName: e.currentTarget.dataset.name
    })
    wx.navigateBack({
    
    //直接back就好了,也不会计入历史记录
      delta:1
    })
  },

这种方法的缺点是:返回到上一页之后只会执行onShow,不会实行onload,如果A页面的列表需要根据B页面的数据改变,那要在A页面的onShow里面清空列表,page归0之后再重新请求列表。这样做。按理说没啥问题,但是个人觉得在onShow里再次请求列表不是很好,因为加入A页面的列表页跳到详情页,详情页再返回到A列表页,那么A页面也会重新请求数据,列表页的位置也不是去详情页之前的位置了,而一般情况下这样是不需要重新请求数据的。所以,想来想去,还是觉得第二种方法靠谱。毕竟在详情页返回A页面的时候,不会携带参数,onload里面的方法不会执行,那列表页的位置还是之前的位置。
以上只是自己一个人的看法,欢迎大家批评指正!!!

猜你喜欢

转载自blog.csdn.net/weixin_44994372/article/details/102640295