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

news/2024/12/15 2:52:30/

前言

  • 源码: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.DEBUGconfig.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): voidgetUserInfo(): 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.ppmy.cn/news/1555183.html

相关文章

Sys系统库 · MySQL 5.8 MySQL 配置详解

为了让大家更容易理解sys系统库及其在MySQL性能问题排查中的重要性&#xff0c;我们将基于MySQL 5.8来讨论如何使用sys系统库进行常见的数据库性能问题排查&#xff0c;并通过一些简单的例子加以说明。 什么是sys系统库&#xff1f; sys系统库是MySQL中的一个辅助库&#xff0…

前端如何安全存储密钥,防止信息泄露

场景 把公钥硬编码在前端代码文件里&#xff0c;被公司安全检测到了要整改&#xff0c;于是整理几种常见的前端密钥存储方案。 1. 设置环境变量再读取 在打包或部署前端应用时&#xff0c;可以将密钥配置为环境变量&#xff0c;在应用运行时通过环境变量读取密钥。这样可以将…

僵尸网络开发了新的攻击技术和基础设施

臭名昭著的 Quad7 僵尸网络&#xff08;也称为 7777 僵尸网络&#xff09;不断发展其运营&#xff0c;最近的发现表明其目标和攻击方法都发生了重大变化。 根据 Sekoia.io 的最新报告&#xff0c;Quad7 的运营商正在开发新的后门和基础设施&#xff0c;以增强僵尸网络的弹性&a…

基于HTML的个人博客系统的设计与实现

一、前言 随着互联网的飞速发展&#xff0c;人们分享生活、表达观点和展示自我的需求日益增长。个人博客作为一种重要的网络交流平台&#xff0c;为用户提供了便捷的信息发布和分享渠道。它不仅可以记录个人的成长经历、专业知识、兴趣爱好等&#xff0c;还能促进用户之间的互动…

Rust学习路线图

‌Rust是一种现代的系统编程语言&#xff0c;专注于性能、安全性和并发性。它在没有垃圾回收器的情况下实现了这些目标&#xff0c;使其成为许多其他语言不擅长的用例中的有用语言。其语法与C相似&#xff0c;但Rust在保持高性能的同时提供了更好的内存安全性。 获取路线图 你…

群控系统服务端开发模式-应用开发-生成用户操作日志

一、操作日志记录方法 在根目录下app文件夹下controller文件夹下找到Base.php文件&#xff0c;在最下面添加如下代码&#xff1a; /*** 操作日志记录* User: 龙哥三年风水* Date: 2024/12/12* Time: 17:11* param $tokenType 操作类型* param $menuName 权限名称*/protected …

大数据挖掘建模平台案例分享

大数据挖掘建模平台是由泰迪自主研发&#xff0c;面向企业级用户的大数据挖掘建模平台。平台采用可视化操作方式&#xff0c;通过丰富内置算法&#xff0c;帮助用户快速、一站式地进行数据分析及挖掘建模&#xff0c;可应用于处理海量数据、高复杂性的数据挖掘任务&#xff0c;…

opencv礼帽和黑帽运算

礼帽 原始输入 - 开运算结果&#xff0c;留存的以白色毛刺为主 黑帽 闭运算 - 原始输入&#xff0c;保留的更多是原始轮廓 # 导入OpenCV库&#xff0c;用于图像处理 import cv2 import numpy as np # 从matplotlib库中导入pyplot模块&#xff0c;用于绘制图像 from …