收藏
回答

wx.navigateBack 是否可以增加对自定义传参的支持?

wx.navigateBack

目前只能控制返回几层,因为小程序最大支持打开10级页面,实际有类似以下场景(目前全部使用 navigateTo 打开):

用户A主页 -> 评价详情1 -> (点击头像进入)用户A主页 -> 评价详情2 ……

如果能支持 navigateBack 传递自定义参数,就不用一直新开页面,可以自行判断使用返回方法,在 onLoad 或 onShow 生命周期获取新的参数,这将会大大提升小程序页面跳转的体验。理论上体验可以做到和APP一样支持打开无限层级页面,又不会因为打开太多页面导致内存暴增。希望官方评估考虑。


----------------------

突然发现有不少人关心这个问题,我就挖坟补充一下:

我们自己实现了近似小程序页面生命周期的方法,从在跳转动作执行时,先从页面栈中找到目标页面,执行这个方法并传递参数,然后再 back 相对应的层级,用法和 onShow 等等一样

onNavigateBack(options) { }

因为我们的小程序是有一层自己封装的路由,所以这个事情在统一路由层面就完成了,业务开发者不用去关心怎么实现的,还是很通用的。



最后一次编辑于  2021-05-21
回答关注问题邀请回答
收藏

11 个回答

  • 赵永_制程
    赵永_制程
    2020-12-18

    这确实是个问题,并且有现实需要。比如编辑页创建新的数据需要加载到返回页面,如果直接带着数据回去,可以减少一次数据库读取。使用prevPage变量,进行上一页setData可解决。

    let tempPage = getCurrentPages(); // 当前页变量

    let prevPage = tempPage[tempPage.length - 2]; // 上一页变量

    // 这里给要打开的页面传递数据.

    this.data.PMCOIList.unshift(funcPra.PMCOI) //新生成的数据,加到数据头 传给前一页

    prevPage.setData({

    PMCOIList: this.data.PMCOIList, //对前一页数据渲染

    })

    wx.navigateBack({ //返回前一页

      delta: 1})

    2020-12-18
    有用 5
    回复 1
    • 季建
      季建
      2021-05-21
      挖个坟。。哈哈。后来自己实现了一个 onNavigateBack 生命周期,找到返回的页面栈,先执行再back,因为我们的跳转走的是自己封装的路由,所以还很通用,业务层不用去关心底层实现。
      2021-05-21
      回复
  • _Error
    _Error
    2021-08-24

    你们需要这个:http://lblblib.gitee.io/tarojs-router-next/guide/quike/sync-router

    2021-08-24
    有用 1
    回复 2
    • 季建
      季建
      2021-08-24
      这个很有意思,有时间研究一下
      2021-08-24
      回复
    • 举觞共笑耳
      举觞共笑耳
      2021-10-23
      很不错,学习了
      2021-10-23
      回复
  • 粘贴师
    粘贴师
    2020-11-23

    两种方式都写了一下

    https://www.mscoder.cn/blog/posts/8670994060c055c20016b1ac1aeee0ed

    2020-11-23
    有用 3
    回复 1
    • 举觞共笑耳
      举觞共笑耳
      2021-10-23
      很不错,学习了
      2021-10-23
      回复
  • 青山深处
    青山深处
    2021-08-29
    好了不说了
    2021-08-29
    有用 1
    回复
  • 草帽男孩
    草帽男孩
    2021-08-27

    这个好,现在反会上一级的时候带参数只能在缓存或者全局变量里面做判断和传递,多加一个返回上一层可触发的方法吧,还可以接受参数

    2021-08-27
    有用 1
    回复
  • 小黄
    小黄
    2021-02-03

    解决方案:存入storsage ,在返回页面后show的时候去找 看storsage里面是否有你要的数据


    2021-02-03
    有用 1
    回复 1
    • wl
      wl
      2021-07-28
      那还不如直接用全局变量 getApp().globalData
      2021-07-28
      回复
  • 细水长流
    细水长流
    2021-08-31

    https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateTo.html

    基础库 2.7.3 新增属性 events

    wx.navigateTo({
      url: 'test?id=1',
      events: {
        // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
        acceptDataFromOpenedPage: function(data) {
          console.log(data)
        },
        someEvent: function(data) {
          console.log(data)
        }
        ...
      },
      success: function(res) {
        // 通过eventChannel向被打开页面传送数据
        res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
      }
    })
    //test.js
    Page({
      onLoad: function(option){
        console.log(option.query)
        const eventChannel = this.getOpenerEventChannel()
        eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'});
        eventChannel.emit('someEvent', {data: 'test'});
        // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
        eventChannel.on('acceptDataFromOpenerPage', function(data) {
          console.log(data)
        })
      }
    })
    


    2021-08-31
    有用
    回复
  • 小岳
    小岳
    2020-11-23

    https://blog.csdn.net/caoyan0829/article/details/79818570

    2020-11-23
    有用
    回复
  • 晓子
    晓子
    2020-11-18

    navigateBack  +  wx.setStorageSync(string key, any data)


    2020-11-18
    有用
    回复
  • this
    this
    2020-10-10

    你是想要navigateBack做页面跳转?

    2020-10-10
    有用
    回复 3
    • 季建
      季建
      2020-10-10
      我现在的业务场景有如果发现页面栈中有相同url+参数的目标页,不再新开。直接back,算是跳转吧。我提这个问题,一方面是为了解决页面打开10层限制,当然选中这个api有一些其他的小的考虑,比如为了规避同一个页面多开状态管理混乱的问题,当然可以不用状态,就是比较麻烦了。
      2020-10-10
      回复
    • this
      this
      2020-10-10回复季建
      可不可以用触发自定义事件的方法,在back的时候获取到参数?这个方案有没有想过
      2020-10-10
      回复
    • 季建
      季建
      2020-10-10回复this
      考虑过,实际会导致很多页面都要一个独立的事件,从设计实现和代码维护上代价太大了。
      2020-10-10
      回复

正在加载...

登录 后发表内容
问题标签