HarmonyOS鸿蒙Next中Navigation组件的官方文档中没有写明与Router的区别

HarmonyOS鸿蒙Next中Navigation组件的官方文档中没有写明与Router的区别。比如Navigation和Router不同,跳转的页面不会走onPageShow等生命周期,建议这些都在文档中说明。

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-navigation


更多关于HarmonyOS鸿蒙Next中Navigation组件的官方文档中没有写明与Router的区别的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

Navigation导航:官方推荐的路由导航方式,支持更丰富的动效、一次开发多端部署能力和更灵活的栈操作。在进行路由导航时需要与NavDestination搭配使用。其中Navigation作为page页面的根容器,NavDestination子页面为Navigation的内容展示区。

Navigation和Router的区别请见:组件导航和页面路由能力对比

Navigation作为路由容器,其生命周期承载在NavDestination组件上,以组件事件的形式开放。

其生命周期大致可分为三类,自定义组件生命周期、通用组件生命周期和自有生命周期。其中,aboutToAppearaboutToDisappear是自定义组件的生命周期(NavDestination外层包含的自定义组件),OnAppearOnDisappear是组件的通用生命周期。剩下的生命周期为NavDestination独有。详见页面生命周期

生命周期差异:

  • Navigation组件所在页面生命周期遵从@Entry修饰的页面的生命周期原则。
  • NavDestination组件的生命周期参考:子页面生命周期。该生命周期本质是子组件的生命周期,不是页面级的,所以当其遮挡Navigation组件时,并不会触发Navigation所在页面的onPageShow事件。

更多关于HarmonyOS鸿蒙Next中Navigation组件的官方文档中没有写明与Router的区别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


建议参考 Navigation与Router对比和如何进行选择

** Navigation & Router能力对比**

业务场景 Navigation能力 Router能力
跳转指定页面 pushPath & pushDestination pushUrl & pushNameRouter
跳转HSP中页面 支持,需要先import页面 支持
跳转HAR中页面 支持,需要先import页面 支持
跳转传参 支持 支持
获取指定页面参数 支持 不支持
跳转结果回调 支持 支持
跳转单例页面 可通过判断栈内有没有此页面,调用moveToTop实现 支持
页面返回 pop back
页面返回传参 支持 支持
返回指定路由 popToName&popToIndex 不支持
页面返回弹窗 通过路由拦截实现 showAlertBeforeBackPage
路由替换 replacePath & replacePathByName replaceUrl & replaceNameRouter
路由栈清理 clear clear
清理指定路由 removeByIndexes & removeByName 不支持
转场动画 支持 支持
自定义转场动画 支持 支持
屏蔽转场动画 pushDestination(info: NavPathInfo, animated?: boolean) & pathStack.disableAnimation(true) 支持 duration属性设置为0
共享元素动画 支持 不支持
页面生命周期监听 UIObserver.on(‘navDestinationUpdate’) UIObserver.on(‘routerPageUpdate’)
获取页面栈对象 支持 不支持
路由拦截 setInterception 不支持
路由栈信息查询 getAllPathName & getParamByIndex & getParamByName&size getState() & getLength()
路由栈操作 moveToTop & moveIndexToTop 不支持
沉浸式页面 支持 不支持,需通过window配置
设置页面属性(背景,模糊等) 支持,backgroundBlurStyle 不支持
设置页面标题栏(title)和工具栏(toolbar) 支持 不支持
模态嵌套路由 支持 不支持

Navigation与Router的核心差异在于页面生命周期触发机制。Navigation采用栈管理,页面切换时通过push/pop操作,新页面入栈即触发onPageShow,原页面保留但不触发onBackPress。Router基于路由表跳转,目标页面完全初始化并触发onPageShow,原页面销毁触发onPageHide。Navigation适用于同任务流页面堆栈,Router适合跨模块导航。生命周期差异因架构设计不同所致,文档需明确标注此行为特性。

在HarmonyOS Next中,Navigation组件和Router确实存在关键差异。Navigation作为容器组件,主要用于管理页面栈和导航栏,其页面切换是通过组件内状态管理实现的,不触发完整的页面生命周期(如onPageShow)。而Router基于路由机制,在页面跳转时会完整执行生命周期回调。

建议在开发时注意:若需要监听页面显示/隐藏事件,应优先选用Router进行导航;若仅需简单的页面堆栈管理且无需生命周期触发,可用Navigation。两者的适用场景不同,文档中明确区分这一点对开发者很有帮助。

回到顶部