评论

一种在Page跳转中实现回调函数的思路

场景: pageA是商品列表,pageB是商品编辑,pageA跳转到pageB保存之后需要更新pageA的数据。 当然跳转到pageB的还可能是其他页面

场景:

pageA是商品列表,pageB是商品编辑,pageA跳转到pageB保存之后需要更新pageA的数据。

当然跳转到pageB的还可能是其他页面

实现:

// pageA
Page({
  data: {
    // ...
  },
  editGoods: function(id) {
    wx.navigateTo({
      url: 'pageB?success=editSuccesss' // 把回调函数用字符串的方式告诉pageB
    })
  },
  editSuccess() {
    // ...处理回调
  }
})

// pageB
Page({
  data: {
    // ...
  },
  onLoad: function(options) {
    this.success = options.success
  },
  save: function() {
    if (this.success) {
      //获取上一个页面并执行回调
      var pages = getCurrentPages()
      pages[pages.length - 2][this.success]() // 回调时还可以增加参数
    }
    wx.navigateBack()
  }
}) 
最后一次编辑于  2020-02-06  
点赞 3
收藏
评论

4 个评论

  • 白开水
    白开水
    2020-08-13

    主要是用于小程序组件间通信;包括:page之间通信,component之间通信,page与component之间通信;

    https://github.com/boiledwater/wx-event-bus

    可以看看如上是否合适

    2020-08-13
    赞同
    回复
  • 海波
    海波
    2020-06-11

    您好,传过来的回调函数是字符串,调用的时候会提示不是一个函数,这个您是怎么解决的

    2020-06-11
    赞同
    回复 1
    • 王庭蛟
      王庭蛟
      2020-06-16
      肯定是你没定义对,注意?success=afterEdit   这个afterEdit函数需要在源页面定义好
      2020-06-16
      回复
  • Admin²⁰²¹
    Admin²⁰²¹
    2020-02-07

    我都是固定一个方法名字的。

        doGoBackAndCallBack() {
          let that = this;
          var pages = getCurrentPages();
          var currPage = pages[pages.length - 2]; //当前页面
          if (currPage && currPage.callback && typeof currPage.callback == "function") {
            currPage.callback({
              deposit_id: that.depositAssureId,
            });
          }
          setTimeout(() => {
            wx.navigateBack({
              delta: 1
            });
          }, 1000);
        }
    
    2020-02-07
    赞同
    回复 2
    • 王庭蛟
      王庭蛟
      2020-02-07
      如果有两种操作都需要回调,那就需要在callback中进行区分了吧?
      2020-02-07
      回复
    • Admin²⁰²¹
      Admin²⁰²¹
      2020-02-07回复王庭蛟
      callback里传参区别
      2020-02-07
      回复
  • Mr.Zhao
    Mr.Zhao
    2020-02-06
     getCurrentPages()  也可以获取A页面的值啊,你不是不想传参吗
    
    2020-02-06
    赞同
    回复 4
    • 王庭蛟
      王庭蛟
      2020-02-06
      这样做目的是让B页面不用关心上一个页面是谁,和组件一样使用
      2020-02-06
      回复
    • Mr.Zhao
      Mr.Zhao
      2020-02-06回复王庭蛟
      你还没回我呢,我误会什么了,我很好奇
      2020-02-06
      回复
    • 王庭蛟
      王庭蛟
      2020-02-06回复Mr.Zhao
      [哭笑]我不想让B自己去找,而是A主动告诉B调用哪个回调函数
      2020-02-06
      回复
    • Mr.Zhao
      Mr.Zhao
      2020-02-06回复王庭蛟
      我又没说让B去找,真有意思
      2020-02-06
      回复
登录 后发表内容