鸿蒙NEXT版实战开辟:UI框架-Navigation与Router对比和怎样举行选择 ...

诗林  金牌会员 | 2025-1-11 20:25:33 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 717|帖子 717|积分 2151

往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)



  • 鸿蒙开辟核心知识点,看这篇文章就够了
  • 最新版!鸿蒙HarmonyOS Next应用开辟实战学习路线
  • 鸿蒙HarmonyOS NEXT开辟技能最全学习路线指南
  • 鸿蒙应用开辟实战项目,看这一篇文章就够了(部分项目附源码)

Navigation与Router对比和怎样举行选择

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


  • 易用性层面:

  • Navigation天然具备标题、内容、回退按钮的功能联动,开辟者可以直接利用此本事。Router若要实现此本事,需要自行界说;
  • Navigation的页面是由组件构成,易于实现共享元素的转场。


  • 功能层面:

  • Navigation天然支持一多,Router不支持;
  • Navigation没有路由数目限定,Router限定32个;
  • Navigation可以获取到路由栈NavPathStack,并对路由栈举行操作;
  • 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即可。
如果项目包含模块,比如项目有主项目,A、B模块,主项目的H界面要跳转到A模块的I界面,或者A模块的I界面要跳转到B模块的J界面,这个时候就要用router。但是主项目里的M界面跳转主项目里的N界面,或者A模块的O界面跳转A模块的P界面,这种属于同模块内的差异界面,可以用Navgation。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

诗林

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表