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
Navigation导航:官方推荐的路由导航方式,支持更丰富的动效、一次开发多端部署能力和更灵活的栈操作。在进行路由导航时需要与NavDestination搭配使用。其中Navigation作为page页面的根容器,NavDestination子页面为Navigation的内容展示区。
Navigation和Router的区别请见:组件导航和页面路由能力对比。
Navigation作为路由容器,其生命周期承载在NavDestination组件上,以组件事件的形式开放。
其生命周期大致可分为三类,自定义组件生命周期、通用组件生命周期和自有生命周期。其中,aboutToAppear和aboutToDisappear是自定义组件的生命周期(NavDestination外层包含的自定义组件),OnAppear和OnDisappear是组件的通用生命周期。剩下的生命周期为NavDestination独有。详见页面生命周期。
生命周期差异:
更多关于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。两者的适用场景不同,文档中明确区分这一点对开发者很有帮助。