《探索 HarmonyOS NEXT (5.0):开启构建模块化项目架构奇幻之旅 —— 动态路由 ZRouter:引领高效模块通信的智慧中枢》

ZRouter简介:是一款轻量级的动态路由框架,基于Navigation系统路由表和Hvigor插件实现的方案,可以解决多个业务模块(HAR/HSP)之间解耦和通信问题,从而实现业务复用和功能扩展。
ZRouter出处ZRouter;

非常感谢大佬出的库,方便我们开发,提高我们开发效率,更详细的介绍和使用请看官方出处。
其它
Navigation官网

ZRouter的配置

  1. 在Dev工具里选择Terminal,通过ohpm工具下载安装库:
    点击查看最新版本
ohpm install @hzw/zrouter

在这里插入图片描述
2. 安装router-register-plugin插件:
点击查看最新版本
2.1. 在项目根目录的hvigor目录的hvigor-config.json5文件中配置安装

    // 远程依赖"router-register-plugin":"1.1.1"

在这里插入图片描述

2.2. 初始配置,在每个模块中的hvigorfile.ts文件导入router-register-plugin插件模块,如下:

  • 导入方式唯一不同在于system:产品定制层是hapTasks ,基础特性层是harTasks 。

2.2.1:产品定制层 导入方式:

import { hapTasks } from '@ohos/hvigor-ohos-plugin';
// 1、导入
import { routerRegisterPlugin, PluginConfig } from 'router-register-plugin'// 2、初始化配置
const config: PluginConfig = {//scanDirs: ['src/main/ets/pages', 'src/main/ets/views'],  // 扫描的目录,如果不设置,默认是扫描src/main/ets目录logEnabled: true, // 日志记录开关viewNodeInfo: false, // 查看节点信息isAutoDeleteHistoryFiles: true // 删除无用编译产物}export default {system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */// 3、添加插件plugins: [routerRegisterPlugin(config)] /* Custom plugin to extend the functionality of Hvigor. */
}

2.2.2:基础特性层 导入方式:

import { harTasks } from '@ohos/hvigor-ohos-plugin';
// 1、导入
import { routerRegisterPlugin, PluginConfig } from 'router-register-plugin'// 2、初始化配置
const config: PluginConfig = {//scanDirs: ['src/main/ets/pages', 'src/main/ets/views'],  // 扫描的目录,如果不设置,默认是扫描src/main/ets目录logEnabled: true, // 日志记录开关viewNodeInfo: false, // 查看节点信息isAutoDeleteHistoryFiles: true // 删除无用编译产物}export default {system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */// 3、添加插件plugins: [routerRegisterPlugin(config)] /* Custom plugin to extend the functionality of Hvigor. */
}

2.3. 添加代码忽略:
_generated目录和route_map.json文件在编译阶段自动生成的,建议在git的.gitignore忽略掉这两个文件。

_generated
route_map.json

ZRouter的基本使用

1、 在EntryAbility的onCreate()方法中初始化ZRouter
    // 如果项目中存在hsp模块则传入trueZRouter.initialize((config) => {config.isLoggingEnabled = BuildProfile.DEBUGconfig.isHSPModuleDependent = false})
2、在Index页面使用Navigation作为根视图

2.1、 为啥要在Index页面使用Navigation,直接启动页不行吗
如果从启动页使用Navigation,启动页跳转到登录页或主页就要销毁,那么Navigation是要长期存在的,所以目前只能在Navigation作为根视图使用
2.2、在Index页,在什么时机下使用呢
如果在生命周期aboutToAppear()跳转启动页,ZRouter.getNavStack()是在build里获取NavPathStack实例对象的,那我们都知道aboutToAppear是在build之前执行的。Navigation作为路由容器,其生命周期承载在NavDestination组件上,所以在onAppear()跳转是最好的。
在这里插入图片描述

3、页面跳转

1.普通跳转,通过页面的name去跳转,并可以携带param,name属性值建议用常量,方便后期维护。本例子中使用 NavName.LOGIN_VIEW

      // 跳转到登录页面ZRouter.getInstance().navigation(NavName.LOGIN_VIEW)// 携带参数跳转ZRouter.getInstance().setParam("携带参数").navigation(NavName.LOGIN_VIEW)// 获取参数ZRouter.getInstance().getParamByName(NavName.LOGIN_VIEW)

2.带返回回调的跳转

 ZRouter.getInstance().setParam("携带参数").enableCrossPageParamReturn().setPopListener((info) => {console.log('xxx 返回携带的数据:', info.data)}).navigation(NavName.LOGIN_VIEW)// 返回传的参数ZRouter.getInstance().popToRootWithResult<string>( '我是登录页返回的数据')
4、根视图的用法
  build() {// 获取NavPathStack实例对象Navigation(ZRouter.getNavStack()) {}.onAppear(() => {// 跳转到登录页面ZRouter.getInstance().navigation(NavName.LOGIN_VIEW)}).hideTitleBar(true).mode(NavigationMode.Stack).width(CommonConst.FULL_PARENT).height(CommonConst.FULL_PARENT)}
5、子视图的用法
build() {NavDestination() {Column() {Text(ZRouter.getInstance().getParamByName(NavName.LOGIN_VIEW).toString()).onClick(() => {ZRouter.getInstance().popToRootWithResult<string>( '我是登录页返回的数据')})}}.width(CommonConst.FULL_PARENT).height(CommonConst.FULL_PARENT)}
6、其它使用方法请查看ZRouter官方文档,后续本篇内容会持续更新更多使用方法。
  • 以往系列文章
  1. 《探索 HarmonyOS NEXT(5.0):开启构建模块化项目架构奇幻之旅 —— 模块化基础篇》
  2. 《探索 HarmonyOS NEXT(5.0):开启构建模块化项目架构奇幻之旅 —— 构建基础特性层》
  3. 《探索 HarmonyOS NEXT(5.0):开启构建模块化项目架构奇幻之旅 —— 构建公共能力层》
  4. 《探索 HarmonyOS NEXT(5.0):开启构建模块化项目架构奇幻之旅 —— Tabs底部导航栏》

若本文对您稍有帮助,诚望您不吝点赞,多谢。

有兴趣的同学可以点击查看源码

  • gitee:https://gitee.com/jiaojiaoone/explore-harmony-next.git
  • github:https://github.com/JasonYinH/ExploreHarmonyNext.git

欢迎加我微信一起交流:+V:yinshiyuba

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1859.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

网络原理(数据链路层)->以太网帧格式解

前言 大家好我是小帅&#xff0c;今天我们来了解以太网帧格式 个人主页 文章目录 1.数据链路层1.1 认识以太⽹1.2 MAC地址&#xff08;⽹卡的硬件地址&#xff09;1.2.1 对⽐理解MAC地址和IP地址 1.3 认识MTU1.4 MTU对IP协议的影响1. 5 MTU对UDP协议的影响1.6 MTU对于TCP协议的…

银行金融知识竞赛活动策划方案

根据《中国人民银行**市中心支行“创新金融服务&#xff0c;支持经济发展”业务竟赛活动实施方案》安排&#xff0c;中支决定于9月28日举办**市人民银行系统“创新金融服务&#xff0c;支持经济发展”现场业务竞赛&#xff0c;为确保业务竞赛组织工作顺利开展&#xff0c;特制定…

渗透测试练习题解析 7 (CTF web)

一、[红明谷CTF 2021]write_shell 1 考点&#xff1a; 1、PHP 短标签 2、 符号的使用 通过代码可知 check 是一个过滤函数&#xff0c;利用正则的方式过滤掉 空格、php、eval 等一些关键字或符号&#xff0c;$dir 是路径&#xff0c;这个值可以通过 actionpwd 获取到&#…

VBA中类的解读及应用第十七讲:类,让文本框在激活时改变颜色(下)

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。 类&#xff0c;是非常抽象的&#xff0c;更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

如何下载安装TestLink?

一、下载TestLink、XAMPP TestLink 下载 |SourceForge.net 备用&#xff1a;GitHub - TestLinkOpenSourceTRMS/testlink-code&#xff1a; TestLink开源测试和需求管理系统 下载XAMPP&#xff1a; Download XAMPP 注意&#xff1a;TestLink与PHP版本有关系&#xff0c;所以XA…

基于SpringBoot+微信小程序+协同过滤算法+二维码订单位置跟踪的农产品销售平台-新

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; “农产品商城”小程序…

实现旺店通到金蝶云星空的数据集成:技术详解

旺店通旗舰版数据集成到金蝶云星空案例分享&#xff1a;入库瞬时成本-生产入库单-1 在企业日常运营中&#xff0c;数据的高效流转和准确对接是确保业务顺利进行的关键。本文将聚焦于一个具体的系统对接集成案例——如何将旺店通旗舰版的数据集成到金蝶云星空&#xff0c;以实现…

selinux与防火墙

一.selinux (1).什么是selinux SELinux是Security-Enhanced Linux的缩写&#xff0c;意思是安全强化的linu。 SELinux是对程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序&#xff0c;因此刚好也 是能够控制网络服务能否访问系统资源的一道关卡。 (2)…

【论文精读】LPT: Long-tailed prompt tuning for image classification

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;论文精读_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 摘要 2. …

链表详解(三)

目录 链表功能实现链表的查找SLNode* SLFind(SLNode* phead, SLNDataType x)代码 链表任意位置前插入void SLInsert(SLNode**pphead&#xff0c;SLNode* pos, SLNDataType x)代码 链表任意位置前删除void SLErase(SLNode**pphead&#xff0c;SLNode* pos)代码 链表任意位置后插…

有php转go项目经验者优先?

新的一周又来了&#xff0c;今天分享的是上海某公司的一面面经&#xff0c;内容主要就是go、mysql和项目&#xff0c;职位要求如下&#xff1a; 发现一个很有意思的点—有php转go项目经验者优先。想不到还有这种好事&#xff0c;本人就是php转go&#xff0c;跟我有相同经历的朋…

【AI换脸整合包及教程】AI 换脸新潮流:FaceFusion 3.0.0,开启无限创意之旅

在科技飞速发展的今天&#xff0c;人工智能已经深入到我们生活的各个角落。其中&#xff0c;AI 换脸技术以其惊人的创造力和趣味性&#xff0c;吸引了无数人的目光。而在众多 AI 换脸工具中&#xff0c;FaceFusion 3.0.0 脱颖而出&#xff0c;成为了引领潮流的佼佼者。 一、AI …

【智慧中控项目】

智慧中控 前言一、搭建开发环境1.需要做什么&#xff1f;1.1 刷机和启动OrangePi Zero2&#xff08;全志H616芯片&#xff09;1.2 在PC上安装虚拟机VM&#xff08;安装VirtualBox或VMware&#xff1a;这是常用的虚拟机软件工具&#xff09;1.3 在虚拟机VM&#xff08;VirtualBo…

“短线看涨”,上升周期中,抓以小波段行情,落袋为安

使用技巧 短线看涨指标属于副图公式&#xff0c;短线怎么操作&#xff1f;看蓝色短期安全线 这个公式主要是在上升周期中&#xff0c;抓以小波段行情为主&#xff0c;落袋为安 弱水三千 只取一瓢 公式 DIFM:(EMA(C,240)-EMA(C,520)); DEAM:EMA(DIFM,180); MACD&#xff08…

21_双端 diff 算法

目录 双端比较的原理非理想状况的处理方式添加新元素移除不存在的元素 在上一节中&#xff0c;我们实现了简单的 diff 算法&#xff0c;简单的 diff 算法利用 key 属性&#xff0c;尽可能的复用 DOM 元素&#xff0c;并通过移动 DOM 元素来完成更新&#xff0c;从而减少不断创建…

微服务实战系列之玩转Docker(十六)

导览 前言Q&#xff1a;基于容器云如何实现高可用的配置中心一、etcd入门1. 简介2. 特点 二、etcd实践1. 安装etcd镜像2. 创建etcd集群2.1 etcd-node12.2 etcd-node22.3 etcd-node3 3. 启动etcd集群 结语系列回顾 前言 Docker&#xff0c;一个宠儿&#xff0c;一个云原生领域的…

注册信息的提交

动态网页是指能够根据用户的操作或输入动态变化的网页。与静态网页相比&#xff0c;动态网页具有交互性和可变性。 一 动态网页概念 动态网页通常使用脚本语言&#xff08;如JavaScript&#xff09;与服务器进行交互&#xff0c;从服务器获取数据并动态更新网页内容。常见的动…

aws 部署测试环境服务+ip域名绑定

aws 部署springboot vue ip域名绑定域名 1.新建实例之后&#xff0c;作为测试环境开放mysql入出站规则&#xff0c;route53域名&#xff0c;红框中放入阿里云域名 1.设置出入站规则 实例应用安全组 2.mysql aws部署&#xff0c;redis,java环境&#xff0c;参见之前文章腾讯…

《数字图像处理基础》学习05-数字图像的灰度直方图

目录 一&#xff0c;数字图像的数值描述 &#xff11;&#xff0c;二值图像 &#xff12;&#xff0c;灰度图像 3&#xff0c;彩色图像 二&#xff0c;数字图像的灰度直方图 一&#xff0c;数字图像的数值描述 在之前的学习中&#xff0c;我知道了图像都是二维信息&…

书生大模型第四期 | L0G3000 git 基础知识

1、破冰行动 fork项目 PR链接&#xff1a;跳转访问 https://github.com/InternLM/Tutorial/pull/21632、构建个人项目 创建一个仓库保存LLM学习的笔记&#xff0c;以md文件为主 博客页面项目