HarmonyOS ArkTS 页面路由 (@ohos.router) 完整指南

77 阅读4分钟

HarmonyOS ArkTS 页面路由 (@ohos.router) 完整指南

鸿蒙第四期开发者活动

在 ArkTS/ArkUI 中,页面路由 是指如何在不同页面之间进行 跳转(Navigate)返回(Back) 、以及 传递数据(Params) 的能力。它是构建多页面应用基础。官方提供了 @ohos.router 模块用于页面路由管理,但需要注意:该模块 不再被推荐用于主导航架构(建议使用 Navigation)。华为开发者


一、什么是路由(Routing)

在应用开发里,路由 就是定义页面之间如何跳转和传数据的机制。它负责:

  • 按页面路径或 URL 启动另一个页面
  • 在页面之间传递参数
  • 支持返回栈行为

在 ArkTS 中,传统的 路由模块是 @ohos.router华为开发者


二、官方态度:不推荐使用 Router

在官方最新指南中已经明确指出:

@ohos.router 不再作为主要导航机制推荐,未来导航将由 Navigation + NavPathStack 完全替代,后者具备更现代、更统一的栈控制能力。华为开发者

虽然 Router 仍然可用,但仅适合:

  • 简单跳转场景
  • 历史兼容代码维护
  • 非栈式导航需求

三、Router 模块工作原理

@ohos.router 的设计借鉴了传统前端/移动开发路由思路:

  • 通过 URL/路径识别目标页面
  • 在跳转时可带 query 参数
  • 跳转逻辑分为“启动新页面”和“返回上一页”两种基本行为 华为开发者

常见的核心功能包括:

功能路由行为
Push打开一个新页面
Back返回上一页
Replace替换当前页面(部分框架支持)
Params传递数据给目标页面

四、Router 基本用法示例

在 ArkTS 页面里引入 Router 并执行跳转:

 import router from '@ohos.router';
 ​
 @Entry
 @Component
 struct Index {
   onClickNext() {
     router.pushUrl({ url: 'pages/Second' });
   }
 ​
   build() {
     Column() {
       Button("下一页").onClick(() => this.onClickNext());
     }
   }
 }

🔹 解释:

  • router.pushUrl({ url: 'pages/Second' }) 会启动一个新页面 Second
  • 这个 URL 必须在项目的 main_pages.json(项目配置)中注册好页面路径。 维基百科

五、路由参数传递

Router 支持在跳转时通过 URL query 传递参数。例如:

 router.pushUrl({ url: 'pages/Detail?userId=123&name=Alice' });

目标页面可以在初始化阶段解析 query 并读取参数。

Router 的参数机制通常是通过字符型 query 传递,不支持复杂对象结构。 如果需要复杂参数,推荐使用 Navigation 方案。华为开发者

六、返回与栈行为

Router 也支持页面返回操作:

 router.back();

这会触发当前页面返回到上一个页面。

Router 的返回行为是基于浏览器式堆栈,不够灵活,不支持像 Navigation 那样的栈插入/替换/深度控制。华为开发者


七、何时使用 Router,何时用 Navigation?

推荐场景

Router 适合:

  • 简单流程跳转(少页面、少参数)
  • 兼容旧代码
  • 不需要复杂栈管理或响应式页面布局

Navigation 适合:

  • 多页面复杂跳转/返回策略
  • 需要传递结构化参数
  • 跨模块统一栈控制
  • 响应式 UI 和多端适配场景

官方明确建议开发者 优先使用 Navigation 进行页面路由控制,而 Router 的使用逐步减少。华为开发者


八、Router 与 Navigation 的本质区别

特性Router (@ohos.router)Navigation
路由模型URL + query栈 + 页面组件
参数传递方式Query 字符串对象参数
栈管理简单全栈 & 嵌套
复杂跳转不支持支持 push/pop/replace 等
响应式布局依赖外部手段内建 Adaptive 模式
推荐使用✅ 官方推荐 华为开发者

🛠 九、Router 使用限制与注意点

  1. 必须在配置文件中注册所有页面路径 Router 使用的 URL 对应开发时的页面路径配置文件(如 main_pages.json)。否则跳转无效。 维基百科
  2. 不支持对象参数直传 Router 只能传 query 数据,需要手工解析再映射成对象字段。
  3. 不支持栈深度控制 Router 仅支持 pushUrl/back,不支持 replace/popToRoot 等更细粒度操作。
  4. Navigation 越来越被推荐 在官方 FAQ 中明确推荐使用 Navigation 替代 Router 作为主导航方案。华为开发者

十、总结

虽然 @ohos.router 仍然可用于 ArkTS 应用管理基本页面跳转,但它已经 不再是官方推荐的路由方案。现代 HarmonyOS 应用开发更倾向于使用:

Navigation + NavPathStack ➤ 更强的参数传递能力 ➤ 更灵活的栈控制 ➤ 更适合复杂页面场景 ➤ 官方推荐架构 华为开发者