收藏
回答

多个页面间事件怎么传递呢?

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

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

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

回答关注问题邀请回答
收藏

6 个回答

  • 牛
    01-17

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

    01-17
    赞同
    回复 1
    • 勉
      01-17
      嗯,但这种写的比较烦啊哈哈
      01-17
      回复
  • 铭锋科技
    铭锋科技
    01-17

    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
            })
          }
        })   
      },
    
    
    01-17
    赞同
    回复 2
    • 勉
      01-17
      谢谢,就是想寻求不用写那么多代码的东西,比如A发消息,同时也收消息。类似广播  只有C页面监听到这个广播之后,才会发送消息给A。
      01-17
      回复
    • 铭锋科技
      铭锋科技
      01-17回复
      你不是说EventChannel行不通嘛,我给你行通了呀,这才多少代码,后面这又是另一种需求了
      01-17
      回复
  • 唏嘘
    唏嘘
    01-17

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

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

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

    01-17
    赞同
    回复 2
    • 勉
      01-17
      我知道这种方法,但是不能确定每次打开C页面的时候都有A页面。也可以从任意地方来。
      01-17
      回复
    • 唏嘘
      唏嘘
      01-17回复
      不能确定每次打开C页面的时候都有A页面  那么你需要
      1.将方法封装成模块调用
      2.直接复制A页面的的方法

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

      01-17
      回复
  • Admin²⁰²⁰
    Admin²⁰²⁰
    01-17

    const pages = getCurrentPages();

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

    01-17
    赞同
    回复 1
    • 勉
      01-17
      我知道这种方法,但是不能确定每次打开C页面的时候都有A页面。也可以从任意地方来。
      01-17
      回复
  • 卢霄霄
    卢霄霄
    01-17

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

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

    01-17
    赞同
    回复 3
    • 勉
      01-17
      我知道这种方法,但是不能确定每次打开C页面的时候都有A页面。也可以从任意地方来。
      01-17
      回复
    • 卢霄霄
      卢霄霄
      01-17回复
      getCurrentPages里面有route
      01-17
      回复
    • Admin²⁰²⁰
      Admin²⁰²⁰
      01-17
      01-17
      回复
  • Why not?
    Why not?
    01-17

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

    01-17
    赞同
    回复
登录 后发表内容
问题标签