当前位置: 首页 > article >正文

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

前言

  • 源码:https://gitee.com/common-apps/ZRouter
  • OH:https://ohpm.openharmony.cn/#/cn/detail/@hzw%2Fzrouter

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

首先确保路由插件在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 })
    })
})

其他

  • 鸿蒙ZRouter动态路由框架—NavDestnation页面模板化
  • 鸿蒙ZRouter动态路由框架—服务路由

http://www.kler.cn/a/429076.html

相关文章:

  • 计算机网络-数据链路层
  • Vue前端框架概述
  • 【深入解析】 RNN 算法:原理、应用与实现
  • usb通过hdc连接鸿蒙next的常用指令
  • [cg] UE5 调试技巧
  • @Scope(“prototype“)
  • java+springboot+mysql游乐园管理系统
  • 重生之我在学Vue-- Vue3 学习路径总览
  • 生成SSH秘钥文件
  • Python实现ARIMA-LSTM回归模型预测股票价格项目实战
  • 深入了解架构中常见的4种缓存模式及其实现
  • Linux —— 管理文件
  • yolov10 生成json 自动标注
  • 《Python数据分析:活用pandas库》学习笔记Day1:Panda DataFrame基础知识
  • k8s集群环境时间同步
  • Ethernet 系列(10)-- 基础学习::UDP
  • 突破空间限制!从2D到3D:北大等开源Lift3D,助力精准具身智能操作!
  • 【Linux系统】Ubuntu 缓冲区机制
  • 【在Linux世界中追寻伟大的One Piece】HTTP cookie
  • NDK编译(使用Android.mk)C/C++程序和库
  • pytest(三)json数据驱动
  • flutter实现如何 检测键盘的显示和隐藏状态
  • Github 2024-12-05 Go开源项目日报 Top10
  • 【C++boost::asio网络编程】有关处理粘包问题的笔记
  • dockers网络连接指令:docker network connect
  • 数据结构初阶---链表(2)---双向链表