【HarmonyOS】HMRouter使用详解(一)环境配置

news/2024/12/21 22:41:04/

背景


在项目中使用官方推荐的Navigation时,需要在所有的页面上都添加一层NavDestination,在代码阅读上会增加多个层级,而且还要在主页面设置对应名字的跳转等问题,配置起来比较繁琐。看到大佬开发的HMRouter使用起来方便简洁,因此,写下这篇文章记录HMRouter的使用。

插件配置


1.HMRouter安装

在终端中运行下面命令进行第三方库的安装。

ohpm install @hadss/hmrouter

2.添加路由编译插件

修改项目的hvigor/hvigor-config.json文件中的dependencies数组。

"dependencies": {"@hadss/hmrouter-plugin": "^1.0.0-rc.6"},

3.使用路由编译插件

在项目的entry/hvigorfile.ts文件中添加插件的使用。如果模块是Har则使用harPlugin(),模块是Hsp则使用hspPlugin()

4.工程配置

由于拦截器、生命周期和自定义转场动画会在运行时动态创建实例,因此需要进行如下配置,使得HMRouter路由框架可以动态导入项目中的模块。

在工程目录下的build-profile.json5中,配置useNormalizedOHMUrl属性为true。

HMRouter使用


在UIAbility中初始化路由框架

在OnCreate中初始化路由框架。

import { HMRouterMgr } from '@hadss/hmrouter';onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {HMRouterMgr.init({context: this.context})hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');}

在首页中定义路由入口

自定义一个NavModifier类,继承AttributeUpdater

class NavModifier extends AttributeUpdater<NavigationAttribute> {initializeModifier(instance: NavigationAttribute): void {instance.mode(NavigationMode.Stack);instance.navBarWidth('100%');instance.hideTitleBar(true);instance.hideToolBar(true);}
}

然后编写页面代码

import { HMDefaultGlobalAnimator, HMNavigation, HMRouter, HMRouterMgr } from '@hadss/hmrouter';
import { AttributeUpdater } from '@kit.ArkUI';
import {PageModel} from '../../Models/PageModel'@Entry
@Component
struct HomePage {modifier: NavModifier = new NavModifier();build() {Column() {// 使用HMNavigation容器HMNavigation({navigationId: 'mainNavigation', options: {standardAnimator: HMDefaultGlobalAnimator.STANDARD_ANIMATOR,dialogAnimator: HMDefaultGlobalAnimator.DIALOG_ANIMATOR,modifier: this.modifier}}) {Column({space:20}) {Button("TwoPage").width("80%").onClick(() => {HMRouterMgr.push({navigationId: "mainNavigation",pageUrl: "TwoPage"})})}.width('100%').height('100%')}}.height('100%').width('100%')}
}

HMNavigation 参数解析

  • navigationId :容器ID并且全局统一
  • homePageUrl:指定默认加载的页面
  • navigationOption:全局参数设置。
    • modifier:Navigation动态属性设置
    • standardAnimator:页面全局动画配置
    • dialogAnimator:弹窗全局动画配置
    • title:navigation的Title设置
    • menus:navigation的menus设置
    • toolbar:navigation的toolbar设置
    • systemBarStyle:navigation的systemBarStyle设置

页面设置

新建跳转的页面TwoPage,里面按钮使用HMRouterMgr.pop方法实现返回上个页面的操作。
必须加上@HMRouter装饰器,pageUrl方法来定义页面的名称

import { HMRouter, HMRouterMgr } from '@hadss/hmrouter'@HMRouter({ pageUrl: "TwoPage" })
@Component
export struct TwoPage {build() {Column({ space: 20 }) {Button("HomePage").width("80%").onClick(() => {HMRouterMgr.pop({navigationId: "mainNavigation"})})}.height("100%").width("100%")}
}

总结


这篇帖子主要关注在HMRouter的环境部署和简单的页面跳转


http://www.ppmy.cn/news/1536981.html

相关文章

阿里云NAS之间迁移实践

本文将介绍如何通过LocalFs的最佳实践来进行阿里云NAS之间数据的迁移。 概述 阿里云提供的在线迁移服务是一种存储产品数据通道&#xff0c;客户有时需要在阿里云NAS之间进行数据迁移。本文档详细介绍了针对这一场景的相关内容。 警告 迁移过程数据不保证数据一致性&#x…

重学SpringBoot3-集成Redis(十一)之地理位置数据存储

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;十一&#xff09;之地理位置数据存储 1. GEO 命令简介2. 项目环境配置2.1. 依赖引入2.2. Redis 配置 3. GEO 数据存储和查询实现3…

whistle使用实践

whistle使用实践 1.简介2.安装启动whistle3.配置代理流转浏览器流量4.访问whistle控制台5.安装https证书6.whistle使用方法控制台界面各个模块的作用代理配置方式匹配模式pattern代理IP例子1.简介 Whistle 是一个基于 Node.js 开发的网络代理工具,主要用于网络请求的代理、调…

【Sqlite】sqlite内部函数sqlite3_value_text特性

目录 ⚛️1 结论 ☪️2 说明 ☪️3 传入数值转成科学计数法 ♋3.1 只有整数部分 ♏3.2 只有小数部分 ♐3.3 整数小数 ⚛️1 结论 整数(sqlite视为int64)位数 > 20位&#xff0c;sqlite3_value_text 采用科学计数法。否则正常表示。 浮点数(sqlite视为double)的整数部…

Python 全栈开发从入门到实战进阶课程

需要课程的&#xff0c;添加文本末尾的联系方式。 以下是一份关于该课程的文档&#xff0c;其中加入了一些具体的代码示例&#xff1a; 《Python 全栈开发从入门到实战进阶课程》介绍 一、课程概述 本课程涵盖了 Python 编程的多个方面&#xff0c;包括编程基础、数据结构、…

vue3实现excel文件预览和打印功能

文章目录 一、预览excel1、安装2、使用3、代码4、效果二、打印excel1、安装2、使用3、代码4、效果三、小结在前端开发中,有时候一些业务场景中,我们有需求要去实现excel的预览和打印功能,本文将介绍在vue3中如何实现Excel文件的预览和打印。 一、预览excel 关于实现excel文…

线性回归逻辑回归-笔记

一、线性回归&#xff08;Linear Regression&#xff09; 1. 定义 线性回归是一种用于回归问题的算法&#xff0c;旨在找到输入特征与输出值之间的线性关系。它试图通过拟合一条直线来最小化预测值与真实值之间的误差。 2. 模型表示 线性回归模型假设目标变量&#xff08;输…

红灯-绿灯-重构

代码在周期内的状态&#xff1a;处于红灯状态时&#xff0c;代码不管用&#xff0c;处于绿灯状态时&#xff0c;一切都想预期的那样工作&#xff0c;但并不一定是最佳的&#xff0c;到了重构阶段&#xff0c;我们知道测试很好的覆盖了各项功能&#xff0c;可以充满信息地修改他…