事件通信通道EventChannel实现两个页面之间的数据传输已在上篇小程序路由跳转---事件通信通道EventChannel(一)展开叙述,接下来讨论下多个页面(三个及以上)数据的通道如何构建。
本文重点:三个以上页面需将事件通信通道保存在一个公共可访问的实例中,比如app全局实例。
以下示例以三个页面为例
A页面
javascript
onLoad: function () {
wx.navigateTo({
url: 'B?id=1',
// events: 注册将在目标页面触发(派发)的同名事件的监听器
events: {
// 定义A页面和B页面之间的通道事件
PageAacceptDataFromPageB: function (data) {
console.log('B页面返回给页面A的数据', data)
},
// 定义A页面和C页面之间的通道事件
PageAacceptDataFromPageC: function (data) {
console.log('页面A收到C页面数据', data)
}
},
success: function (res) {
console.log(res.eventChannel)
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit('PageAacceptDataFromPageB', { data: 'page A->B' })
}
})
},
B页面
javascript
onLoad: function (option) {
//注意this.getOpenerEventChannel() 只能在navigateTo模板页面使用,其他更多页面使用时,
//可以保存在getApp()全局实例中以备其他页面使用
// 保留AB通道事件,已备C页面给A页面发送数据
const eventChannel = this.getOpenerEventChannel()
// 保留AB通道事件,已备C页面给A页面发送数据
getApp().pageBeventChannel = eventChannel
// 监听PageAacceptDataFromPageB事件,获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('PageAacceptDataFromPageB', function (data) {
console.log('页面B收到来自页面A的数据', data)
})
eventChannel.emit('PageAacceptDataFromPageB', { data: 'page B->A' });
wx.navigateTo({
url: 'C?id=1',
events: {
// 定义B页面和C页面之间的通道事件
PageBacceptDataFromPageC: function (data) {
console.log('C页面返回给页面B的数据', data)
}
},
success: function (res) {
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit('PageBacceptDataFromPageC', { data: 'page B->C' })
}
})
},
C页面
javascript
onLoad: function (option) {
const eventChannel = this.getOpenerEventChannel()
// 监听PageBacceptDataFromPageC事件,获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('PageBacceptDataFromPageC', function (data) {
console.log('页面C收到来自页面B的数据', data)
})
eventChannel.emit('PageBacceptDataFromPageC', { data: 'Page C->B' });
// 使用AB通道的PageAacceptDataFromPageC事件给A发送数据
const pageBeventChannel = getApp().pageBeventChannel
pageBeventChannel.emit('PageAacceptDataFromPageC', { data: 'Page C->A' });
},
运行结果
至此小程序路由跳转---事件通信通道EventChannel就告一段落,欢迎各位小伙伴积极互动。