评论

一种在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()
  }
}) 
最后一次编辑于  02-06  
点赞 2
收藏
评论

2 个评论

  • Admin²⁰²⁰
    Admin²⁰²⁰
    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);
        }
    
    02-07
    赞同
    回复 2
    • Jeff
      Jeff
      02-07
      如果有两种操作都需要回调,那就需要在callback中进行区分了吧?
      02-07
      回复
    • Admin²⁰²⁰
      Admin²⁰²⁰
      02-07回复Jeff
      callback里传参区别
      02-07
      回复
  • undefined
    undefined
    02-06
     getCurrentPages()  也可以获取A页面的值啊,你不是不想传参吗
    
    02-06
    赞同
    回复 4
    • Jeff
      Jeff
      02-06
      这样做目的是让B页面不用关心上一个页面是谁,和组件一样使用
      02-06
      回复
    • undefined
      undefined
      02-06回复Jeff
      你还没回我呢,我误会什么了,我很好奇
      02-06
      回复
    • Jeff
      Jeff
      02-06回复undefined
      [哭笑]我不想让B自己去找,而是A主动告诉B调用哪个回调函数
      02-06
      回复
    • undefined
      undefined
      02-06回复Jeff
      我又没说让B去找,真有意思
      02-06
      回复
登录 后发表内容