鸿蒙ZRouter动态路由框架—服务路由

前言

服务路由主要用于实现模块之间的通信,模块间是相互独立且不直接依赖于彼此。

首先确保路由插件在1.0.9版本及以上

一、添加配置

1、在entry模块的build-profile.json5文件的 buildOption 下配置需要动态import加载的模块,如下:

注意:是在buildOption节点下设置,不是buildOptionSet

复制代码
  "buildOption": {
    "arkOptions": {
      "runtimeOnly": {
        // 配置本模块变量动态import其他模块名,要求与dependencies中配置的名字一致。
       "packages": [ "hara","harb","hspc" ]  
      }
    }
  }

二、初始化

在EntryAbility的onCreate()方法中初始化:

复制代码
ZRouter.initialize((config) => {
  config.isLoggingEnabled = BuildProfile.DEBUG
  config.isHSPModuleDependent = true  
  config.loadDynamicModule = ['hara', 'harb', 'hspc']
  config.onDynamicLoadComplete = () => {
    console.log("已完成所有模块的加载")
  }
})

初始化配置参数说明如下:

复制代码
 interface IConfigOptions {
  /**
   * 是否有依赖hsp模块
   */
  isHSPModuleDependent: boolean
  /**
   * 是否打印日志
   */
  isLoggingEnabled: boolean
  /**
   * 指定动态加载的模块名称,用于服务路由自动注册
   * 必须与dependencies的依赖名称保持一致
   */
  loadDynamicModule: string[]
  /**
   * 延迟动态加载的时间,单位毫秒
   */
  dynamicLoadDelayTime: number

  /**
   * 动态加载完成后回调函数
   */
  onDynamicLoadComplete?: () => void
  
}

到这里已完成了服务路由的初始化。

三、基本使用

1、在业务公共common模块定义下沉接口,需要继承与IProvider接口

复制代码
import { IProvider } from "@hzw/zrouter";

export interface IHarAService extends IProvider {
  showToast(msg: string): void

  getUserInfo(): Promise<string>
}

记得在common模块的Index.ets文件导出这些下沉接口。

2、在业务模块(harA)实现IHarAService接口

复制代码
import {  Service } from "routerapi";
import { promptAction } from "@kit.ArkUI";
import { IHarAService, RouterConstants } from "common_library";

@Service({ name: RouterConstants.SERVICE_HARA_IMPL })
export class HarAServiceImpl implements IHarAService {
  showToast(msg: string): void {
    promptAction.showToast({ message: msg })
  }

  getUserInfo(): Promise<string> {
    return new Promise<string>((resolve, reject) => {
      resolve("hello harmonyos")
    })
  }

}

实现类必须通过@Service注解进行标注,支持常量设置, 常量必须以类的方式管理 ,export导出暂不支持default声明。

3、在业务模块(harB)中调用,通过ZRouter的getService()方法获取定义的服务实例,代码如下:

复制代码
Button('模块间通信-调用harA模块的异步方法').onClick((event: ClickEvent) => {
    ZRouter.getService<IHarAService>(RouterConstants.SERVICE_HARA_IMPL)?.getUserInfo().then((r)=>{
       console.log("调用harA模块的异步方法:  ", r)
       promptAction.showToast({ message: "来自harA的数据: " + r })
    })
})

Button('模块间通信-调用harA模块的同步方法').onClick((event: ClickEvent) => {
    ZRouter.getService<IHarAService>(RouterConstants.SERVICE_HARA_IMPL)?.showToast("hello ZRouter!")
})
        
Button('模块间通信-调用hspC模块的异步方法').onClick((event: ClickEvent) => {
     ZRouter.getService<IHspCService>(RouterConstants.SERVICE_HSPC_IMPL)?.getDataFromHspC().then((r) => {
        promptAction.showToast({ message: r })
    })
})

其他

相关推荐
zhanshuo2 小时前
在鸿蒙里优雅地处理网络错误:从 Demo 到实战案例
harmonyos
zhanshuo2 小时前
在鸿蒙中实现深色/浅色模式切换:从原理到可运行 Demo
harmonyos
whysqwhw7 小时前
鸿蒙分布式投屏
harmonyos
whysqwhw8 小时前
鸿蒙AVSession Kit
harmonyos
whysqwhw10 小时前
鸿蒙各种生命周期
harmonyos
whysqwhw11 小时前
鸿蒙音频编码
harmonyos
whysqwhw11 小时前
鸿蒙音频解码
harmonyos
whysqwhw11 小时前
鸿蒙视频解码
harmonyos
whysqwhw11 小时前
鸿蒙视频编码
harmonyos
ajassi200011 小时前
开源 Arkts 鸿蒙应用 开发(十八)通讯--Ble低功耗蓝牙服务器
华为·开源·harmonyos