HarmonyOS鸿蒙Next中几个路由控制的问题
HarmonyOS鸿蒙Next中几个路由控制的问题 router、navigation、navRouter有什么区别
Navigation是鸿蒙系统中的一种页面跳转方式,它可以完全替换router的能力。Navigation可以处理复杂场景,如应用当前或以后可能出现的复杂动效、交互、多级路由等。推荐使用Navigation进行整体交互体验的一致性,并持续在路由能力方面进行演进和增强。而router不提供这种复杂场景的支持,并且不建议在模块间与模块内使用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进行修饰,当前模块加载时会生成全量页面。
应用架构可以参考链接:应用架构概述-架构-最佳实践 - 华为HarmonyOS开发者。
从API Version 9开始,推荐Navigation与NavRouter组件搭配使用,NavRouter是导航组件,默认提供点击响应处理,不需要自定义点击事件逻辑,必须包含两个子组件,其中第二个子组件必须为NavDestination,详情参考:NavRouter-导航与切换-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
如您在后续开发中遇到路由相关问题,可重新发起工单,感谢您的理解。
更多关于HarmonyOS鸿蒙Next中几个路由控制的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,路由控制主要涉及以下几个方面:
-
路由跳转:鸿蒙Next提供了
Router
模块来实现页面间的跳转。通过Router.push()
和Router.replace()
方法可以实现页面的压栈和替换操作。Router.push()
会将新页面压入栈顶,而Router.replace()
则替换当前页面,不会保留历史记录。 -
路由参数传递:在跳转时,可以通过
params
参数传递数据到目标页面。目标页面通过this.params
来接收传递的参数。 -
路由拦截:鸿蒙Next支持路由拦截功能,可以在路由跳转前进行拦截处理。通过
Router.beforeEach()
方法可以注册全局前置守卫,用于在跳转前进行权限验证或其他逻辑处理。 -
路由回退:通过
Router.back()
方法可以实现页面回退操作。回退时,可以通过Router.getParams()
获取回退时传递的参数。 -
路由模式:鸿蒙Next支持多种路由模式,包括
standard
(标准模式)、singleTop
(单例顶部模式)、singleTask
(单例任务模式)等。不同的路由模式会影响页面的生命周期和跳转行为。 -
路由栈管理:鸿蒙Next提供了
Router.getStack()
方法获取当前路由栈信息,便于开发者对路由栈进行管理和调试。
这些功能为开发者提供了灵活的路由控制手段,便于在应用中进行页面导航和管理。
在HarmonyOS鸿蒙Next中,路由控制主要涉及以下几个方面:
- 路由跳转:通过
Router
模块实现页面跳转,支持参数传递和目标页面回传数据。 - 路由拦截:可以在路由跳转前进行拦截处理,例如权限校验或数据预处理。
- 路由栈管理:支持查看、修改和清除路由栈,灵活控制页面跳转流程。
- 动态路由:支持动态注册路由,适用于插件化或模块化开发场景。
- 路由传参:支持多种参数传递方式,包括基本类型、对象和回调函数。
合理使用这些功能,可以提升应用的导航体验和代码的可维护性。