多个页面间事件怎么传递呢?
发布于 8 年前 作者 tao54 3934 次浏览 最后一次编辑是 7 年前 来自 官方Issues

现在有个需求A页面打开B页面,B页面打开C页面,

C页面操作完后触发A页面的方法。

小程序的EventChannel好像行不通,那还有什么方法可以实现这种需求吗。。求各位大大赐教。

6 回复

这样在C页面操作完后写就能 操作A页面的testFn方法

 const pages = getCurrentPages();
let lastPage = pages[pages.length - 3];   //  -1 是当前页面c  -2  是上一页B   -3是上上一页A
lastPage.testFn();   //这里就是  lastPage 相当于A页面的this

--↓↓👍点赞是回答的动力哦

1、getCurrentPages拿到对应页面进行操作

2、在C页面将要做的事情放到app.js(也可以是别的全局的js)里,然后A页面onShow的时候执行

getCurrentPages拿到对应页面,不知道是不是有a,可以在通过传递参数或者存缓存标志位判断

C触发B,B再触发A就可以了。

const pages = getCurrentPages();

然后找出C页面的index,直接调用里面的方法

EventChannel可以的

c.js


  /**
   * 生命周期函数--监听页面加载
   */
  onLoadfunction (options{
    var that = this
     let eventChannel = this.getOpenerEventChannel();
      eventChannel.on('acceptDataFromOpenerPage'function (data{
        if (data) {    
   
            data.data.afunc() //触发 A页面方法
          
        }
       
      })
  },

b.js

  goc(){
    var that = this
    wx.navigateTo({
      url'./c',
      successfunction (res{
        res.eventChannel.emit('acceptDataFromOpenerPage', {
          data: that.data.dataa
        })
      }
    }) 
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoadfunction (options{
    var that = this
     let eventChannel = this.getOpenerEventChannel();
      eventChannel.on('acceptDataFromOpenerPage'function (data{
        if (data) {          
          that.setData({dataa :data.data})
        }
       
      })
  },

a.js

  afunc(){
    console.log('ok')
  },
  gob(){
    var that = this
    wx.navigateTo({
      url'./b',
      successfunction (res{
        res.eventChannel.emit('acceptDataFromOpenerPage', {
          data: that
        })
      }
    })   
  },

回到顶部