方法
页面间事件通信通道,被打开页面和当前页面之间的通讯。官方文档
- 注意: 只有通过
wx.navigateTo()
转跳页面打开的页面才有eventChannel实例对象否则为{}空对象。
EventChannel.emit(string eventName, any args)
:触发一个事件。发射事件,当前页面可以向被打开页面发射,被打开页面也可以向当前页面发射。EventChannel.on(string eventName, function fn(res))
:持续监听一个事件。EventChannel.once(string eventName, function fn(res))
:监听一个事件一次,触发后失效。EventChannel.off(string eventName, function fn)
:取消监听一个事件。给出第二个参数时,只取消给出的监听函数,否则取消所有监听函数。
当前页面index
navigateTo
的参数events
- 用于监听被打开页面发送到当前页面的数据。
Object
形式。key:被打开页面通过eventChannel.emit发射的事件变量名
,value:回调函数(res)
。- 每一个参数表示为事件添加一个监听器,获取到被打开页面传递给当前页面的数据。
Page({
onClickEventChannelAndGoToPag(){
wx.navigateTo({
url: '/pages/list/list',
events: {
cToFEventData: (res) => {
console.log(res);
}
}
})
}
})
navigateTo
的参数success
- success回调的参数
res
可以获取到eventChannel对象
。 - 转跳成功的回调中可以通过
res.eventChannel.emit
向被打开页面传递数据。
Page({
onClickEventChannelAndGoToPag(){
wx.navigateTo({
url: '/pages/list/list',
success: (res)=>{
res.eventChannel.emit('myEventObj', {name: 'tz',age: 10});
res.eventChannel.emit('myEventData', 'tzof');
}
})
})
})
被打开页面list
- 在
生命周期内
使用eventChannel方法。 - 在
page
中通过this.getOpenerEventChannel()
方法可以获取eventChannel对象
。 - 可以通过
eventChannel.on
监听当前页面发射的自定义事件。 - 可以通过
eventChannel.emit
向当前页面传递数据。
Page({
onLoad(){
const eventChannel = this.getOpenerEventChannel();
eventChannel.on('myEventData', (res) => {console.log(res);});
eventChannel.emit('cToFEventData', 'ldsfjjlksfd');
}
})
示例
Page({
onClickEventChannelAndGoToPag() {
wx.navigateTo({
url: '/pages/list/list',
// 页面间通信接口 用于监听 被打开页面 发送到 当前页面的数据。
events: {
// key:被打开页面通过eventChannel emit发射的事件变量名
// value:回调函数
// 为事件添加一个监听器,获取到被打开页面传递给当前页面的数据
cToFEventData: (res) => {
console.log(res);
}
},
// 成功的回调函数
success: (res) => {
console.log(res);
// 通过success回调的参数res可以获取到eventChannel对象
// eventChannel对象提供了emit方法 可以发射事件同时携带参数
// res.eventChannel.emit(变量, 参数)
res.eventChannel.emit('myEventData', 'tzof');
res.eventChannel.emit('myEventObj', {
name: 'tz',
age: 10
})
}
})
}
})
Page({
onLoad(options) {
console.log(options);
// 只有通过转跳页面打开的页面才有eventChannel实例对象否则为{}空对象
// 通过this.getOpenerEventChannel方法可以获取eventChannel对象
const eventChannel = this.getOpenerEventChannel();
// eventChannel对象提供的on方法 监听页面发射的自定义事件
// eventChannel.on(变量,回调函数)
eventChannel.on('myEventData', (res) => {
console.log(res);
})
eventChannel.on('myEventObj', (res) => {
console.log(res);
})
// 通过eventChannel提供的emit方法也可以向上一级传递数据(打开此页面的页面)
eventChannel.emit('cToFEventData', 'ldsfjjlksfd')
}
})