EventChannel

优质
小牛编辑
137浏览
2023-12-01

EventChannel

页面间事件通信通道

方法

EventChannel.emit(string eventName, any args)

触发一个事件

参数

string eventName

事件名称

any args

事件参数

EventChannel.on(string eventName, EventCallback fn)

持续监听一个事件

参数

string eventName

事件名称

function fn

事件监听函数

参数
any args

触发事件参数

EventChannel.once(string eventName, EventCallback fn)

监听一个事件一次,触发后失效

参数

string eventName

事件名称

function fn

事件监听函数

参数
any args

触发事件参数

EventChannel.off(string eventName)

取消监听一个事件。

参数

string eventName

事件名称

示例代码

//eventChannel-A.js
Page({
  navigateTo(url){
    jd.navigateTo({
      url:"../eventChannel-B/eventChannel-B",
      events: {
        // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
        eventA: function(data) {
          console.info(' 页面A接收到消息 navigate 内容为: ',data)
        }
      },
      success: ((res) =>{
        // 通过eventChannel向被打开页面传送数据
        res.eventChannel.emit('eventB', { data: ' 这是页面A发送的消息 navigate '})
      })

    })
  }
})

//eventChannel-B.js
Page({
  eventChannel : null,
  onLoad: function(option){
    this.eventChannel = jd.getOpenerEventChannel();
  },
  callbackOnceB(data){
    console.info(' 页面B用 once 接收消息 内容为: ',data)
  },
  callbackOnB(data){
    console.info(' 页面B用 on 接收消息 内容为: ',data)
  },
  emitA(){
    this.eventChannel.emit('eventA', {data: ' 这是B页面发送的消息 Button'});
  },
  onB(){
    this.eventChannel.on('eventB',this.callbackOnB);
  },
  onceB(){
    this.eventChannel.once('eventB',this.callbackOnceB);
  },
  offAllB(){
    this.eventChannel.off('eventB');
  }
})