HarmonyOS 中 Navigation 和 router是一回事吗?

在鸿蒙(HarmonyOS)中,Navigation 组件 并不是一种独立的路由机制,而是一个 UI 导航容器组件 ,用于构建具有导航功能的界面结构(如底部导航栏、侧边栏等)。它的主要职责是管理 同级页面或子组件的切换和布局 ,而非直接处理页面跳转逻辑。不过,开发者通常会结合 @ohos.router 模块和 Navigation 组件共同实现完整的导航功能。


  • 功能定位
    Navigation 是 ArkUI 提供的一个 布局容器组件 ,用于实现常见的导航模式(如 Tab 导航、抽屉导航等)。它通过 NavRouterNavDestination 管理子组件的切换。
  • 与路由的区别
    • 路由(@ohos.router:负责页面栈管理、跨页面跳转和参数传递(底层逻辑)。
    • Navigation 组件:负责导航栏的 UI 展示和交互(视觉层),需要与路由配合使用。

场景:实现底部 Tab 导航

typescript 复制代码
// main.ets
import router from '@ohos.router';

@Entry
@Component
struct NavigationExample {
  @State activeIndex: number = 0; // 当前选中的 Tab 索引

  build() {
    Navigation() {
      // 底部 Tab 栏
      NavDestination() {
        Column() {
          Text('首页').fontSize(20)
          Button('跳转到详情页')
            .onClick(() => {
              // 通过路由跳转到详情页
              router.pushUrl({ url: 'pages/DetailPage' });
            })
        }
        .width('100%')
        .height('100%')
      }
      .title('首页')
      .icon($r('app.media.home'))

      NavDestination() {
        Column() {
          Text('设置页').fontSize(20)
        }
        .width('100%')
        .height('100%')
      }
      .title('设置')
      .icon($r('app.media.settings'))
    }
    .title('导航示例')
    .mode(NavigationMode.Stack) // 堆栈模式
    .navBarPosition(NavigationPosition.Bottom) // 底部导航栏
    .onNavStateChange((index: number) => {
      // Tab 切换事件
      this.activeIndex = index;
    })
  }
}

代码解析

  1. Navigation 容器 :包裹所有导航页面(NavDestination)。
  2. NavDestination:定义每个 Tab 对应的内容和样式。
  3. 路由跳转 :在 Tab 页面内仍使用 router.pushUrl() 实现跨页面跳转。
  4. 导航模式
    • Stack:堆栈模式(默认),适合层级跳转。
    • Split:分屏模式(大屏设备适用)。

职责 Navigation 组件 路由(@ohos.router
页面跳转 不直接处理跳转,需调用 router API 通过 pushUrl/back 管理跳转
导航栏 UI 提供 Tab、标题栏等视觉元素 无 UI 元素
页面栈管理 不管理页面栈 维护页面栈(前进、后退)
参数传递 不支持直接传参 通过 params 传递 JSON 对象
适用场景 同级页面切换(如 Tab 导航) 跨层级页面跳转(如详情页、表单页)

4. 常见误区澄清

误区 1Navigation 可以替代路由

纠正

  • Navigation 仅负责 同级页面的布局和切换,无法处理跨层级跳转或页面栈管理。
  • 若需要跳转到其他层级的页面(如从首页跳转到详情页),仍需使用 router.pushUrl()

误区 2Navigation 自带路由功能

纠正

  • Navigation 的 Tab 切换本质上是组件显隐控制,而非真正的路由跳转。
  • 若需要页面生命周期管理(如 onPageShow/onPageHide),仍需依赖 @ohos.router

typescript 复制代码
// 在 Tab 页面内实现路由跳转
Button('跳转到独立页面')
  .onClick(() => {
    router.pushUrl({
      url: 'pages/IndependentPage',
      params: { from: 'Tab1' }
    });
  })

// 返回时处理路由
Button('返回')
  .onClick(() => {
    router.back();
  })

总结

  • Navigation 组件UI 导航容器,用于构建 Tab 栏、侧边栏等导航结构的界面。
  • 路由(@ohos.router底层跳转逻辑,负责页面栈管理和参数传递。
  • 二者需结合使用:Navigation 管理同级页面的布局,路由处理跨层级跳转。
相关推荐
亚历克斯神1 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
钛态1 小时前
Flutter 三方库 smartstruct 鸿蒙化字段映射适配指南:介入静态预编译引擎扫除视图及数据模型双向强转类型错乱隐患,筑稳如磐石的企业级模型治理防线-适配鸿蒙 HarmonyOS ohos
flutter·华为·harmonyos
键盘鼓手苏苏1 小时前
Flutter 组件 csv2json 适配鸿蒙 HarmonyOS 实战:高性能异构数据转换,构建 CSV 流式解析与全栈式数据映射架构
flutter·harmonyos·鸿蒙·openharmony
雷帝木木1 小时前
Flutter 三方库 hrk_logging 的鸿蒙化适配指南 - 实现标准化分层日志记录、支持多目的地输出与日志分级过滤
flutter·harmonyos·鸿蒙·openharmony·hrk_logging
左手厨刀右手茼蒿1 小时前
Flutter 三方库 dio_compatibility_layer 的鸿蒙化适配指南 - 实现 Dio 跨主版本的平滑迁移、支持遗留拦截器兼容与网络请求架构稳定升级
flutter·harmonyos·鸿蒙·openharmony·dio_compatibility_layer
雷帝木木2 小时前
Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私-适配鸿蒙 HarmonyOS ohos
安全·flutter·harmonyos
HwJack203 小时前
HarmonyOS响应式布局与窗口监听:让界面像呼吸般灵动的艺术
ubuntu·华为·harmonyos
王码码20354 小时前
Flutter 组件 inappwebview_cookie_manager 适配 鸿蒙Harmony 实战 - 驾驭核心大 Web 容器缓存隧道、构建金融级政企应用绝对防串号跨域大隔离基座
flutter·harmonyos·鸿蒙·openharmony·inappwebview_cookie_manager
左手厨刀右手茼蒿4 小时前
Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案
flutter·harmonyos·鸿蒙·openharmony
键盘鼓手苏苏4 小时前
Flutter 组件 spry 适配鸿蒙 HarmonyOS 实战:轻量化 Web 框架,构建高性能端侧微服务与 Middleware 治理架构
flutter·harmonyos·鸿蒙·openharmony