从 Router 到 Navigation:HarmonyOS 路由框架的全面升级与迁移指南

在本教程中,我们深入探讨了 Router 和 Navigation 在 HarmonyOS 中的用法差异及如何从 Router 切换到 Navigation 的方法。重点涵盖了页面跳转、转场动画、生命周期管理以及跨包路由的实现。

页面结构对比

Router 页面结构

每个页面需要使用 @Entry 注解。

页面需要在 main_page.json 中进行注册。

示例代码:

复制代码
// main_page.json
{
  "src": [
    "pages/Index",
    "pages/pageOne",
    "pages/pageTwo"
  ]
}

Router 页面示例:

复制代码
@Entry
@Component
struct Index {
  build() {
    Button('Navigate to PageOne')
      .onClick(() => {
        router.pushUrl({ url: 'pages/pageOne' });
      });
  }
}

Navigation 页面结构

基于组件化的设计。

需要一个 NavPathStack 对象来管理页面栈。

子页面通过 NavDestination 进行注册。

示例代码:

复制代码
@Entry
@Component
struct Index {
  pathStack: NavPathStack = new NavPathStack();

  build() {
    Navigation(this.pathStack) {
      Button('Push PageOne')
        .onClick(() => this.pathStack.pushPathByName('pageOne'));
    }
    .title("Navigation");
  }
}

路由操作对比

生命周期管理

Router 生命周期

Router 页面依赖全局生命周期方法,主要包括:

aboutToAppear()

onPageShow()

aboutToDisappear()

onPageHide()

Navigation 生命周期

Navigation 生命周期基于 NavDestination 组件,提供了更多粒度的生命周期方法,如:

onWillAppear()

onAppear()

onWillDisappear()

onDisAppear()

动画支持

Router 转场动画

Router 提供系统预设和自定义动画,支持 sharedTransition 实现共享元素转场。

Navigation 转场动画

Navigation 内置转场动画机制,可通过 customNavContentTransition 自定义切换效果。同时支持通过 geometryTransition 属性实现共享元素转场。

跨包路由

Router 跨包路由

通过 @Entry 注解的 routeName 属性实现命名路由,并在主页面引入目标页面的路径。

示例代码:

复制代码
import('library/src/main/ets/pages/Index');

router.pushNamedRoute({ name: 'myPage', params: { key: 'value' } });

Navigation 跨包路由

Navigation 内置支持跨包跳转,目标页面在子包中声明为 export 后,直接在 Navigation 中注册。

总结

Router 更适合简单的页面跳转需求,而 Navigation 提供了更丰富的栈操作、动画自定义和组件化管理能力。如果项目需要跨包跳转或复杂的页面管理,建议迁移至 Navigation 体系。

相关推荐
江华森2 小时前
把鸿蒙云手机调试的 5 个坑写成 Skill:12 项检查清单与报错决策树
harmonyos
木木子223 小时前
用华为云码道构建校园导航应用「新生通」:从需求分析到工程落地
华为·华为云·harmonyos
贾伟康5 小时前
HarmonyOS API 26 Navigation 自适应模式:mode、分栏切换与窗口断点治理
harmonyos·arkts·arkui·navigation·自适应布局
贾伟康5 小时前
【转盘决定吧|07】HarmonyOS ArkTS 6.0.2.130 趣味题库:场景分类、随机选择与详情页解耦
harmonyos·arkts·路由·数据建模·arkui
贾伟康5 小时前
【电路实验模拟|03】HarmonyOS ArkTS 交通灯实战:用定时状态切换红黄绿灯
harmonyos·arkts·canvas·arkui·交通灯
贾伟康1 天前
HarmonyOS API 26 嵌套 Navigation:getParent、父子栈边界与返回分发
harmonyos·arkts·navigation·嵌套路由·navpathstack
行者-全栈开发1 天前
【鸿蒙心迹】多线程并发实战——TaskPool 与 Worker 选型与踩坑(HarmonyOS 7.x)
华为·harmonyos·多线程并发·worker·taskpool·线程通信·harmonyos 并发
OH_TPC1 天前
@ohos/aki 源码解读(一):一行绑定背后,宏、模板与索引分发
harmonyos
贾伟康1 天前
【解压时刻|13】HarmonyOS ArkTS 启动链路审计:从 EntryAbility、AppStore 到 Navigation 首屏
harmonyos·arkts·appstorage·应用启动·entryability
贾伟康1 天前
【古诗词闯关|12】HarmonyOS ArkTS 单页组件拆分实战:降低题库、闯关与结果弹层耦合
harmonyos·arkts·状态管理·arkui·组件化