HarmonyNext如何实现组件间通信 原创

zhouchy
发布于 2025-3-8 21:54
浏览
0收藏


文章目录

概要

对于简单的应用,一般单一模块就能满足需求。但是对于规模比较大,功能比较多的应用,就需要考虑通过组件化拆分,来让项目架构更清晰了。那么就会带来新的问题,如何在组件之间进行数据通信呢?

整体架构流程

HarmonyNext如何实现组件间通信-鸿蒙开发者社区

技术细节

1、在公共组件中按照业务组件分别创建通信接口,对其它组件暴漏可供调用的函数

export interface ICompComm {

}

export interface IModule1Comm extends ICompComm {
  
  method1(): Promise<string>

  method2(param: string): Promise<boolean>

}

export interface IModule2Comm extends ICompComm {
  
  method3(param: number): Promise<string>

}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

2、创建组件通信管理器

const COMM_MODULE1 = 'COMM_MODULE1'
const COMM_MODULE2 = 'COMM_MODULE2'

export class CommManager {
  private static instance: CommManager
  private static mServices: Map<string, ICompComm> = new Map()

  public static getInstance(): CommManager {
    if (!CommManager.instance) {
      CommManager.instance = new CommManager()
    }
    return CommManager.instance
  }

  register<T extends ICompComm>(moduleName: string, service: T) {
    CommManager.mServices.set(moduleName, service)
  }

  service(moduleName: string) {
    return CommManager.mServices.get(moduleName)
  }

}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

3、在公共组件module的Index.ets文件中导出

export { IModule1Comm } from "./src/main/ets/comm/IModule1Comm"
export { IModule2Comm } from "./src/main/ets/comm/IModule2Comm"
export { CommManager } from "./src/main/ets/comm/CommManager"
  • 1.
  • 2.
  • 3.

4、在业务组件module中实现通信接口

export class Module1CommImpl implements IModule1Comm {

  method1(): Promise<string> {
    return Promise.resolve('')
  }

  method2(param: string): Promise<boolean> {
    return Promise.resolve(true)
  }

}

export class Module2CommImpl implements IModule2Comm {

  method3(param: number)): Promise<string> {
    return Promise.resolve('')
  }

}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

5、在业务module的index.ets文件中导出

export { Module1CommImpl } from './src/main/ets/comm/Module1CommImpl'
export { Module2CommImpl } from './src/main/ets/comm/Module2CommImpl'
  • 1.
  • 2.

6、在EntryAbility.ets文件中将通信接口实现类注册到通信组件管理器中

CommManager.getInstance().register<IModule1Comm>(COMM_MODULE1, new Module1CommImpl())
CommManager.getInstance().register<IModule2Comm>(COMM_MODULE2, new Module2CommImpl())
  • 1.
  • 2.

7、在需要进行组件间通信的地方,通过组件通信管理器获取到通信接口实现类,即可实现跨组件通信

CommManager.getInstance().service(COMM_MODULE1) as IModule1Comm).method1()
  • 1.

小结

以上就是组件间通信的简单实现。


©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
    相关推荐