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

鸿蒙路由管理HMRouter环境配置

目录

前言

一、安装与配置

1. 安装

2. 配置插件依赖

3. 配置根目录 hvigorfile.ts

4. 配置模块级 hvigorfile.ts

场景 1:模块为 HAP(应用入口),使用 hapPlugin:

场景 2:模块为 HSP(动态特性包),使用 hspPlugin:

场景 3:模块为 HAR(静态特性包),使用 harPlugin:

如何查看模块类型

二、使用步骤

1. 初始化与路由入口

1.1 初始化

1.2 定义路由入口

1.3 编写代码

总结


前言

在项目中使用官方推荐的Navigation时,需要在所有的页面上都添加一层NavDestination,在代码阅读上会增加多个层级,而且还要在主页面设置对应名字的跳转等问题,配置起来比较繁琐。HMRouter是HarmonyOS上的页面跳转路由框架,主要解决应用内原生页面间相互跳转的问题,底层封装了Navigation能力,让开发者无需关心繁琐的导航逻辑。

一、安装与配置

1. 安装

首先需要在终端中运行以下命令,安装 HMRouter 的核心库:

ohpm install @hadss/hmrouter@1.2.4

2. 配置插件依赖

打开hvigor/hvigor-config.json5文件,在dependencies中添加@hadss/hmrouter-plugin插件,版本建议与 HMRouter 库保持一致:

{ "modelVersion": "6.0.1", "dependencies": { "@hadss/hmrouter-plugin": "^1.2.4" // 建议使用与库一致的版本 } }

注意:上面安装的ohpm install @hadss/hmrouter@1.2.4是在运行时使用,"@hadss/hmrouter-plugin": "^1.2.4"是在编译时使用。

3. 配置根目录 hvigorfile.ts

【只有当入口模块时,可以不配置】

修改项目根目录的hvigorfile.ts文件,需要正确导入并使用appPlugin,并传入配置参数:

import { appTasks } from '@ohos/hvigor-ohos-plugin'; // 注意:这里是从 '@hadss/hmrouter-plugin' 导入 appPlugin import { appPlugin } from '@hadss/hmrouter-plugin'; export default { system: appTasks, // 必须传入参数对象,否则会报错 plugins: [appPlugin({ ignoreModuleNames: [] })] };

特别注意:appPlugin在调用时必须传入参数对象(如{}{ ignoreModuleNames: [] }),否则构建时会报错。

4. 配置模块级 hvigorfile.ts

修改你的模块(如 entry)目录下的hvigorfile.ts文件。根据你的模块类型选择对应的插件:

场景 1:模块为 HAP(应用入口),使用 hapPlugin:

import { hapTasks } from '@ohos/hvigor-ohos-plugin'; import { hapPlugin } from '@hadss/hmrouter-plugin'; export default { system: hapTasks, plugins: [hapPlugin()] };

场景 2:模块为 HSP(动态特性包),使用 hspPlugin:

import { hspTasks } from '@ohos/hvigor-ohos-plugin'; import { hspPlugin } from '@hadss/hmrouter-plugin'; export default { system: hspTasks, plugins: [hspPlugin()] };

场景 3:模块为 HAR(静态特性包),使用 harPlugin:

import { harTasks } from '@ohos/hvigor-ohos-plugin'; import { harPlugin } from '@hadss/hmrouter-plugin'; export default { system: harTasks, plugins: [harPlugin()] };
如何查看模块类型

打开模块的build-profile.json5文件,查看"type"字段:

{ "apiType": "stageMode", "buildOption": { }, "targets": [ { "name": "default" } ] }

注意:如果build-profile.json5中没有显式指定"type",默认是"hap"类型。

二、使用步骤

1. 初始化与路由入口

1.1 初始化

在 EntryAbility 里的onCreate进行初始化:

HMRouterMgr.init({context: this.context}) // 初始化 HMRouter

1.2 定义路由入口

自定义一个NavModifier类,继承AttributeUpdater<NavigationAttribute>

// 自定义 Navigation 属性,用于隐藏标题栏等 export class NavModifier extends AttributeUpdater<NavigationAttribute> { initializeModifier(instance: NavigationAttribute): void { // Stack:堆栈页面(多页面层级跳转), Split:分栏导航(平板大屏左右分栏) instance.mode(NavigationMode.Stack); // 导航栏宽度铺满屏幕 instance.navBarWidth('100%'); // 隐藏顶部标题栏 instance.hideTitleBar(true); // 隐藏底部工具栏 instance.hideToolBar(true); } }

navigationId是 HMRouter 的导航容器标识符,区分不同的导航容器,告诉HMRouterMgr.push()往哪个容器里跳转,不同navigationId是不同的页面栈,互不影响。

1.3 编写代码

Column() { // 使用 HMNavigation 容器 HMNavigation({ navigationId: 'mainNavigation', // homePageUrl: 'MainPage', // 首页路由地址(可选,不传则显示 children 内容) 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" }) }) } } }

HMNavigation({})后面包含的Column是一个children,是默认显示的内容。不传homePageUrl时它充当首页,如果pageUrl没有指定跳转的页面,就会跳转到这个子页面。

总结

HMRouter 通过封装 HarmonyOS 原生的 Navigation 能力,简化了页面路由的配置和使用流程。开发者无需在每个页面手动添加 NavDestination,也无需在主页面维护复杂的跳转逻辑,只需简单的初始化、配置和调用即可实现页面间的灵活跳转,有效提升了开发效率和代码可读性。

http://www.jsqmd.com/news/1139340/

相关文章:

  • Claude、GLM、GPT谁才是真正的AI软件工程师?首个持续更新Visual Spec-to-App Benchmark发布
  • F28377D Modbus RTU跨平台移植:三组关键映射实战指南
  • 零代码 ETL 特征挖掘:一键提取标题关键词、统计作品互动均值
  • 数据中台平台能力评估:这5层架构能力缺一不可
  • 第一个文件:CLAUDE.md
  • Ollama工具学习
  • 5分钟零基础上手:roop-unleashed AI换脸工具完全指南
  • AAF 框架能力介绍:图文音视频一站式 AIGC 模块上线
  • mimo code安装教程
  • 如何彻底掌控惠普游戏本性能:开源工具OmenSuperHub完整指南
  • 李飞飞LeCun疯狂加注!这匹中国黑马,已在因果AI暗战6年
  • GPU显存压力测试实战:用memtest_vulkan快速定位显卡稳定性问题
  • NumPy 到 PyTorch 数据流:5个常见陷阱与GPU张量转换最佳实践
  • 三步掌握Ghidra逆向分析:从环境搭建到实战效率提升
  • Shellcode加载器免杀技术:MFC伪装与XT材料诱饵对抗AV/EDR
  • 谷歌大佬盛赞Fable 5!23年前PC神作,40分钟塞进iPhone
  • 2026 中国 AI 产业商业化转型:资本博弈、算力成本与付费模式深度解析
  • 向量检索加速首选:阿里云 Tair 内置向量能力毫秒级召回
  • 2026年广西马山花生油TOP5品牌能否畅销深圳东莞广州?
  • Thingsboard - 用户密码设置
  • 2026数据运营必备:主流数据可视化工具深度选型指南
  • 终极指南:使用OpenCore Legacy Patcher让老旧Mac重获新生,体验最新macOS系统
  • Ollama TLS配置实战:从私有CA到生产环境HTTPS部署指南
  • 【高效管理token成本】OpenClaw精细化分库管理memory以减少token成本的方案的可行性研究06-27
  • 数据挖掘 CRISP-DM 流程实战:6步法从业务理解到模型部署(附 Python 代码)
  • 突破出海曝光转化多重痛点拓氪科技核心解法是什么?
  • 救命!这些英文词用错,人变 “物”、物变 “人”,社死到抠脚!
  • 普通开发转决策 AI 必备:工信部强化学习专项培训,覆盖机器人 自动驾驶 大模型对齐
  • Unity物理系统全解析:从核心原理到性能优化实战指南
  • 2026最新:在线视频转文字怎么选?这3款实用免费神器亲测好用