小程序路由跳转---事件通信通道EventChannel(二)

事件通信通道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就告一段落,欢迎各位小伙伴积极互动。

相关推荐
林恒smileZAZ11 分钟前
Electron 的西天取经
前端·javascript·electron
这就是佬们吗16 分钟前
告别 Node.js 版本冲突:NVM 安装与使用全攻略
java·linux·前端·windows·node.js·mac·web
IT_陈寒19 分钟前
2024年JavaScript开发者必备的10个ES13新特性实战指南
前端·人工智能·后端
Miketutu20 分钟前
Flutter - 布局
开发语言·javascript·ecmascript
满栀58522 分钟前
基于 jQuery 实现商品列表增删改查与数据统计
前端·javascript·jquery
web小白成长日记22 分钟前
CSS 作用域隔离实战:React、Vue 与 Styled Components 的三种范式
前端·css·vue.js·react.js
Mr -老鬼23 分钟前
Electron 与 Tauri 全方位对比指南(2026版)
前端·javascript·rust·electron·nodejs·tauri
幻云201025 分钟前
Next.js 之道:从全栈思维到架构实战
开发语言·javascript·架构
king王一帅5 小时前
Incremark Solid 版本上线:Vue/React/Svelte/Solid 四大框架,统一体验
前端·javascript·人工智能
智航GIS9 小时前
10.4 Selenium:Web 自动化测试框架
前端·python·selenium·测试工具