收藏
回答

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

wx.navigateBack

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

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

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


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

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

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

onNavigateBack(options) { }

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



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

13 个回答

  • 制程_赵永_13918704268(行者)
    制程_赵永_13918704268(行者)
    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
    有用 2
    回复 2
    • 季建
      季建
      2021-08-24
      这个很有意思,有时间研究一下
      2021-08-24
      回复
    • Quba    🛸     
      Quba    🛸     
      2021-10-23
      很不错,学习了
      2021-10-23
      回复
  • 粘贴师
    粘贴师
    2020-11-23

    两种方式都写了一下

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

    2020-11-23
    有用 4
    回复 1
  • 青山深处
    青山深处
    发表于移动端
    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
      回复
  • A3
    A3
    2023-06-21

    即使官方实现了,如果用户点右下角的按钮返回,貌似小程序操作不到它。会造成wx.navigateBack()携参返回和点右下角按钮返回效果不一致的现象。

    2023-06-21
    有用
    回复
  • 小海龟🍊
    小海龟🍊
    2022-01-26

    有详细且有没那么复杂的解决方案吗

    2022-01-26
    有用
    回复
  • 细水长流
    细水长流
    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
    有用
    回复 1
    • 小人物
      小人物
      2022-10-10
      答非所问
      2022-10-10
      1
      回复
  • 小岳
    小岳
    2020-11-23

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

    2020-11-23
    有用
    回复

正在加载...

登录 后发表内容
问题标签