在HarmonyOS NEXT开发中Navigation和router怎么用?

在HarmonyOS NEXT开发中Navigation和router怎么用?如果都用navigation的话,是不是不需要那么多page了?如果一个app只有一个page的话,会不会有什么问题呢?navigation是不是不支持跳转page?

阅读 1.1k
1 个回答

解决方案如下所示:
1.当前版本:
(1)模块间页面跳转选型:对于Hap与Hsp之间的跳转,使用router进行路由跳转,对于开发者来说更为简单。即直接在对应的page.json文件声明,随后按照路由格式跳转,通过每个页面的url实现模块间解耦。
Hap与Har之间的跳转,基于上述Router方案,可以使用router+命名路由,但是该方案需要开发者动态import对应的页面,会增加模块间的耦合性。对于路由跳转较为复杂的应用,需要重视该问题,Navigation有同样的动态import能力与问题,不过动态import可以优化用户的首次加载速度体验。
(2)模块内页面跳转选型:Navigation,本质是组件级路由,组件之间的依赖关系较复杂,更适合模块内的页面跳转。另外Navigation能够提供更好的转场效果,在当前版本,模块内跳转建议使用Navigation。
2.演进计划:对于router在模块间的能力,后续Navigation将会提供更加友好的模块间跳转功能。作为API的局限性,Router配合@Entry的路由方式很难实现以下场景的功能,需要使用Navigation实现。
(1)页面间传递不可序列化的页面参数router由C++存储数据,类型受限;而Navigation可以使用统一的前端路由表配置对象,由开发者基于状态管理能力通过驱动数据驱动页面切换,参数配置完全由开发者自己定义
(2)复杂动效互动场景的实现,如页面之间元素进行共享互动页面与页面之间相互独立,无法产生关联,尤其在复杂动效互动场景下(页面之间元素进行共享互动)很难实现
(3)模态互动场景在模态交互场景,比如半模态弹窗等,需要在模态界面进行页面切换,而模态界面本身属于页面内的控件,无法通过页面路由实现模态界面中的切换效果,需要提供组件级的路由能力,嵌套在模态弹窗内。
(4)灵活的让开发者灵活管控页面的加载和销毁@Entry方式通过工具链生成自执行代码,一旦当前模块加载就会自动执行代码生成页面,无法让开发者管控加载和销毁逻辑
(5)一多分栏能力自动适配窗口显示大小,在窗口较大的场景下自动切换分栏展示效果
考虑上述Navigation的优势,以及为保证体验一致性,推荐使用Navigation。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏