鸿蒙NEXT版实战开辟:UI框架-Navigation与Router对比和怎样举行选择
往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)[*] 鸿蒙开辟核心知识点,看这篇文章就够了
[*] 最新版!鸿蒙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举行标识。
https://i-blog.csdnimg.cn/img_convert/9236b850b2e36d73be6e7852a4f7d944.jpeg
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。
https://i-blog.csdnimg.cn/direct/5be73c96555f4ad39cb84daabe28288e.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]