HarmonyOS 鸿蒙Next中Navigation和Router有哪些区别?

HarmonyOS 鸿蒙Next中Navigation和Router有哪些区别?

6 回复

当前HarmonyOS支持两套路由机制(NavigationRouter),Navigation作为后续长期演进及推荐的路由选择方案,其与Router比较的优势如下:

  • 易用性层面:
    • Navigation天然具备标题、内容、回退按钮的功能联动,开发者可以直接使用此能力;Router若要实现此能力,需要自行定义。
    • Navigation的页面是由组件构成,易于实现共享元素的转场;router仅用于被@Entry修饰的页面之间的跳转。
  • 功能层面:
    • Navigation天然支持一多,Router不支持。
    • Navigation没有路由数量限制,Router限制32个。
    • Navigation可以获取到路由栈NavPathStack,并对路由栈进行操作,Router不支持。
    • Navigation可以嵌套在模态对话框中,也就是说可以模态框中定义路由,Router不支持。
    • Navigation的组件全量由开发者自行控制,开发者可以自定义复杂的动效和属性的设置(背景、模糊等),Router的page对象不对外暴露,开发者无法对page进行处理。
  • 性能层面:
    • Navigation传递参数性能更优,Navigation通过引用传递,Router通过深拷贝完成。
    • Navigation可以配合动态加载,实现组件动态加载,Router页面使用@Entry进行修饰,当前模块加载时会生成全量页面。

Navigation & Router结构对比

  • Navigation中的每个页面,承载在一个page里,通过NavDestination容器实现基于组件的页面跳转。
  • Router的每一个页面配置在一个单独的page中,通过@Entry进行标识

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
项目只有一个主模块,同一个模块内的页面之间跳转 项目包含多个模块,不同模块间的页面跳转。比如项目有主项目,A、B模块,主项目的H界面要跳转到A模块的I界面,或者A模块的I界面要跳转到B模块的J界面

Navigation相比router功能更丰富,用法更灵活,且router后续不再演进新的功能,推荐使用Navigation。

更多关于HarmonyOS 鸿蒙Next中Navigation和Router有哪些区别?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

按我个人理解,还有一点,router页面路由栈最多接受32个页面,Navigation没有页面数量限制,

Navigation是鸿蒙Next的UI组件,用于构建页面导航结构,如底部导航栏和顶部导航栏。Router是鸿蒙Next的路由管理机制,负责页面跳转和导航逻辑处理。Navigation侧重界面导航展示,Router管理页面间路由关系。两者在鸿蒙Next中协同工作,实现应用内导航功能。

在HarmonyOS Next中,Navigation和Router是两种不同的导航机制,主要区别如下:

  1. 功能定位不同

    • Navigation:基于UI组件的导航方式,通常用于管理页面栈和页面跳转,例如通过NavDestinationNavController实现界面间的切换。
    • Router:基于路由表的URL导航机制,通过解析URI路径映射到具体页面,支持跨应用或页面间的路由跳转。
  2. 使用场景不同

    • Navigation:适用于单应用内多页面的结构化导航,例如底部导航栏或页面层级跳转。
    • Router:适用于解耦的页面路由,常用于需要动态配置或跨模块跳转的场景。
  3. 实现方式不同

    • Navigation:依赖UI组件和页面栈管理,需要在代码中显式定义导航结构。
    • Router:通过路由配置表(如RouterConfig)和URI进行跳转,更具灵活性。

简单来说,Navigation更偏向于UI层的页面管理,而Router侧重于通过路由规则进行页面调度。根据具体需求选择合适的导航方式。

回到顶部