## 介绍
ZRouter是一款轻量级的动态路由框架,基于Navigation系统路由表和Hvigor插件实现的方案,可以解决多个业务模块(HAR/HSP)之间解耦和通信问题,从而实现业务复用和功能扩展。主要特性:
- 对Navigation简化使用,封装一系列简单易用的API,支持链式调用,无需再关注路由表的配置,对Navigation组件保持着零侵入零耦合;
- 注解参数支持使用静态常量,可跨模块定义;
- 支持多个拦截器(支持优先级和中断拦截)和全局拦截器,可实现页面跳转和显示、埋点、登录等拦截处理;
- 支持服务路由,可在相互独立的Har/Hsp模块间通信;
- 支持组件的生命周期管理,以及跨多级页面参数回传接收;
- 支持自定义URL路径跳转,可通过拦截URL路径来跳转原生不同页面;
- 支持第三方Navigation的使用本库API;
- 支持启动模式、混淆、嵌套Navigation;
- 未来计划:支持转场动画、NavDestination代码模版化选项。
> ZRouter侧重于路由跳转与模块解耦,以及组件化通信;对Navigation组件没有任何耦合,不做任何的限制把自主权交给开发者。
**使用十分简单,没有繁琐的配置,两行代码就可以完成页面的跳转**,如下:
<center>
[![a1.png](https://www.z4a.net/images/2024/10/12/a1.png)](https://www.z4a.net/image/yUNrzw)
</center>
ZRouter已上架录入到[华为鸿蒙生态伙伴组件专区](https://developer.huawei.com/consumer/cn/market/landing/component)
![a2.png](https://www.z4a.net/images/2024/10/12/a2.png)
## router-register-plugin插件的使用
### 下载安装
在项目根目录的hvigor目录的hvigor-config.json5文件中配置安装
```
"dependencies": {
// "router-register-plugin":"file:../plugins/router-register-plugin-1.0.2.tgz"
"router-register-plugin":"1.0.7"
},
```
![Static Badge](https://img.shields.io/badge/router-register-plugin?link=https%3A%2F%2Fgithub.com%2F751496032%2FRouterRegisterPlugin)
[![npm](https://img.shields.io/npm/v/router-register-plugin)](https://www.npmjs.com/package/router-register-plugin)
最后记得Sync Now或重新build让插件安装生效。
或者使用hvigorw命令行工具执行任一命令,命令行工具会自动执行安装构建依赖。
```
hvigorw --sync
```
### 初始配置
在每个模块中的hvigorfile.ts文件导入router-register-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 {
// 3、添加插件
plugins:[routerRegisterPlugin(config)]
}
```
常用的配置字段:
- scanDirs:扫描的目录,建议是页面目录,这样可以更精准扫描目标文件,如果不设置,默认是扫描src/main/ets目录
- logEnabled:日志记录开关。
- viewNodeInfo:查看节点信息的开关,只有logEnabled和viewNodeInfo同时开启才会生效
- isAutoDeleteHistoryFiles:是否删除无用编译产物。
PluginConfig配置对象还有其他属性,但不建议使用,使用默认值即可。
> 上面所有路径都是相对模块的src目录而言的,是相对路径。最后记得Sync Now或重新build让配置生效。
其中`_generated`目录和`route_map.json`文件在编译阶段自动生成的,建议在git的`.gitignore`忽略掉这两个文件。
```gitignore
_generated
route_map.json
```
## ZRouter的基本使用
### 下载安装
在每个har/hsp模块中,通过ohpm工具下载安装库:
```
ohpm install @hzw/zrouter
```
### 页面跳转
新建三个模块分别是harA、harB、hspC,三者之间没有依赖关系,entry模块依赖了这三个模块,通过ZRouter可以在四个模块间相互跳转,从而达到模块解耦效果。模块关系图如下图:
<center>
![6a594e11394c60d93983297a1e5322db.png](https://www.z4a.net/images/2024/10/17/6a594e11394c60d93983297a1e5322db.png)
</center>
1、在EntryAbility的onCreate()方法中初始化ZRouter,**建议使用initialize()方法进行初始化,init()方法已弃用**
```
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 如果项目中存在hsp模块则传入true
// ZRouter.init(true)
ZRouter.initialize((config) => {
config.isLoggingEnabled = BuildProfile.DEBUG
config.isHSPModuleDependent = true
})
}
```
2、在Index页面**使用Navigation作为根视图,通过ZRouter的getNavStack()方法获取NavPathStack实例,将其传入到Navigation的构造函数中。**
> 如果在Index入口文件中启动Splash页面,建议放在Navigation的onAppear方法中进行启动,或者组件的onPageShow方法,具体可参考demo
```
// Index 中使用 aboutToAppear 生命周期函数会因为 Navigation 还没初始化完成导致无法有效跳转,可使用替换成 onPageShow
@Entry
@Component
struct Index {
build() {
// 获取NavPathStack实例对象
Navigation(ZRouter.getNavStack()){
Column({space:12}){
Button('toHarAMainPage').onClick((event: ClickEvent) => {
// 跳转页面
ZRouter.push("harAMainPage")
})
Button('toHarBMainPage').onClick((event: ClickEvent) => {
ZRouter.push("harBMainPage")
})
Button('toHspCIndex').onClick((event: ClickEvent) => {
ZRouter.push("hspCIndex")
})
Button('tohspCPage1').onClick((event: ClickEvent) => {
ZRouter.push("hspCPage1")
})
}
}
.title('Main')
.height('100%')
.width('100%')
}
}
```
通过ZRouter的pushXX()方法进行页面跳转,参数是@Route装饰器上的name属性值。或者用ZRouter的getNavStack()方法来执行页面跳转。
3、在子页的结构体上使用自定义@Route装饰器描述当前页面,其中name属性是必填的,页面跳转需要用到name值,建议使用驼峰式命名,还有另外三个可选属性分别是:
- description:页面描述,没有功能作用;
- needLogin:如果页面需要登录,可以将值设置为true,然后在拦截器中做页面重定向到登录页;
- extra:额外的值可以通过该属性设置
> @Route和@Service注解的name属性值是支持使用常量,具体使用在下面有介绍
代码如下:
```
@Route({ name: 'hspCPage1', needLogin:true ,extra: 'hsp'})
@Component
export struct Page1 {
@State message: string = 'Hello World';
build() {
NavDestination(){
Column({space:12}){
Button('toHarAPage1').onClick((event: ClickEvent) => {
ZRouter.push("harAPage1")
})
}
}
.title('hspCPage1')
.width('100%')
.height('100%')
}
}
```
NavDestination是子页面的根容器,不需要在main_pages文件中注册页面路径。
**建议通过ZRouter.getInstance()方式来操作路由的跳转与关闭,使用会更灵活,之前的ZRouter的静态方法依然保留着。**
```typescript
ZRouter.getInstance()
.setParam("root data")
.setLunchMode(LaunchMode.STANDARD) // 启动模式
.enableCrossPageParamReturn() // 跨页面参数返回
.setAnimate(false)
.setPopListener((r) => {
LogUtil.log("index result: ", r.data ," from: ", r.from);
})
.navigation("harAPage3")
```
### 拦截器
ZRouter支持多个拦截器和全局拦截器,在拦截器中可以做页面跳转的拦截,比如登录拦截,404拦截、埋点、自定义URL路径跳转等。
#### 全局拦截器
全局拦截器提供两种使用方式:
- 直接函数回调时的方式;
- 类实现接口的方式(建议使用,�
没有合适的资源?快使用搜索试试~ 我知道了~
ZRouter是基于鸿蒙Navigation系统路由表和Hvigor插件实现的动态路由方案,以解决模块间的耦合与通信问题
共207个文件
ets:99个
json5:36个
ts:15个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 51 浏览量
2024-11-15
19:01:08
上传
评论
收藏 528KB ZIP 举报
温馨提示
ZRouter是基于鸿蒙Navigation系统路由表和Hvigor插件实现的动态路由方案,以解决模块间的耦合与通信问题
资源推荐
资源详情
资源评论
收起资源包目录
ZRouter是基于鸿蒙Navigation系统路由表和Hvigor插件实现的动态路由方案,以解决模块间的耦合与通信问题 (207个子文件)
RouterMgr.ets 15KB
Router.ets 7KB
NavStackMgr.ets 5KB
NavBuilder.ets 5KB
Index.ets 4KB
Lifecycle1View.ets 3KB
ConfigInitializer.ets 3KB
InterceptorMgr.ets 3KB
interceptors.ets 3KB
Lifecycle2View.ets 2KB
MainPage.ets 2KB
ObjectUtil.ets 2KB
Model.ets 2KB
EntryAbility.ets 2KB
Page3.ets 2KB
Ability.test.ets 2KB
Ability.test.ets 2KB
Ability.test.ets 2KB
Ability.test.ets 2KB
Ability.test.ets 2KB
Ability.test.ets 2KB
Lifecycle3View.ets 2KB
EmptyPage.ets 2KB
LocalUnit.test.ets 2KB
LocalUnit.test.ets 2KB
LocalUnit.test.ets 2KB
LocalUnit.test.ets 2KB
LocalUnit.test.ets 2KB
LocalUnit.test.ets 2KB
LifecycleCaseView.ets 2KB
AddIntercetors.ets 2KB
Index.ets 2KB
Lifecycle2Model.ets 1KB
NavStackState.ets 1KB
LifecycleModel.ets 1KB
URLPage.ets 1KB
GlobalLifecycleObserverImpl.ets 1KB
ServiceCaseView.ets 1KB
Lifecycle4View.ets 1KB
LifecycleRegistry.ets 1KB
NavPage.ets 1KB
SplashPage.ets 1KB
Page1.ets 1KB
LoginVerifyCodePage.ets 1KB
ServiceMgr.ets 1016B
RouterConstants.ets 993B
Page1.ets 991B
Page1.ets 984B
MainPage.ets 956B
Page2.ets 924B
Page2.ets 874B
IInterceptor.ets 827B
HarAServiceImpl.ets 784B
Page5.ets 772B
Index.ets 757B
LoginPage.ets 685B
LogUtil.ets 607B
NavOptions.ets 547B
BuildProfile.ets 519B
BuildProfile.ets 519B
BuildProfile.ets 519B
BuildProfile.ets 519B
OrderPage.ets 496B
Page2.ets 479B
EntryBackupAbility.ets 425B
HspCServiceImpl.ets 411B
Page4.ets 409B
Index.ets 393B
OrderDetailsPage.ets 372B
Const.ets 313B
MainPage.ets 271B
RouterConst.ets 255B
Test2.ets 252B
Service.ets 250B
Test.ets 247B
Route.ets 240B
ToastUtils.ets 236B
Index.ets 228B
RedirectModel.ets 223B
Test.ets 178B
IHarAService.ets 159B
IHspCService.ets 132B
List.test.ets 105B
List.test.ets 105B
List.test.ets 105B
List.test.ets 105B
List.test.ets 105B
List.test.ets 105B
Index.ets 100B
List.test.ets 99B
List.test.ets 99B
List.test.ets 99B
List.test.ets 99B
List.test.ets 99B
List.test.ets 99B
IProvider.ets 89B
Calc.ets 61B
Index.ets 57B
Index.ets 54B
.gitignore 159B
共 207 条
- 1
- 2
- 3
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 7451
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 塑料检测23-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- Python圣诞节倒计时与节日活动管理系统
- 数据结构之哈希查找方法
- 系统DLL文件修复工具
- 塑料、玻璃、金属、纸张、木材检测36-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- Python新年庆典倒计时与节日活动智能管理助手
- Nosql期末复习资料
- 数据结构排序算法:插入排序、希尔排序、冒泡排序及快速排序算法
- 2011-2024年各省数字普惠金融指数数据.zip
- 计算机程序设计员三级(选择题)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功