鸿蒙开发中,不同的har包间跳转如何实现?

鸿蒙开发中,不同的har包间跳转如何实现?

阅读 1k
1 个回答

在鸿蒙OS中,不同HAR包之间的跳转可以通过路由管理实现。以下是具体步骤:

  1. 路由管理的实现RouterModule:定义全局的路由栈和路由表信息 。路由栈是NavPathStack对象,与Entry.hap的Navigation组件绑定,RouterModule通过持有NavPathStack管理Navigation组件的路由信息。路由表builderMap是Map结构,以key-value的形式存储了需要路由的页面组件信息,其中key是自定义的唯一路由名,value是WrappedBuilder对象,该对象包裹了路由名对应的页面组件 
  2. 页面跳转的实现路由注册和路由获取:在工程主入口模块Entry.hap中引入RouterModule模块和所有需要进行路由注册的业务HAR模块 。在RouterModule模块中定义路由表和路由获取方法,业务HAR模块通过路由注册方法将需要路由的页面组件委托给RouterModule管理 。路由跳转:在需要进行页面跳转的地方(如A1组件)调用RouterModule模块的push方法实现跳转到指定页面。push方法会动态加载目标页面,并触发路由注册逻辑。
  3. 动态加载初始化函数:在需要加载多个页面的HAR模块(如B.har)中定义加载时的初始化函数harInit 。该函数在页面加载时被调用,动态加载不同的页面 。路由信息:在push方法中,通过RouterModel作为参数传递路由信息,包括目标包名、路由名和所需的参数信息。RouterModule根据路由名调用harInit函数,实现页面的动态加载。
  4. 多路由栈管理路由栈表:在RouterModule模块中建立一个路由栈表,以key-value的形式存储多个Navigation组件对应的路由栈 。通过routerName获取到路由栈,再进行方法调用 
  5. 具体场景示例假设有3个业务模块A.har、B.har、C.har,各模块包含以下页面:

    • A.har模块中包含A1组件。
    • B.har模块中包含B1、B2、B3组件 。
    • C.har模块中包含C1、C2组件 。

    当需要从A1组件逐级返回到B1组件,再返回到C1组件时,可以按照以下步骤实现:

    1. 在A.har的A1组件中调用RouterModule的pop方法,返回到B.har的B2组件 
    2. 在B.har的B2组件中调用RouterModule的pop方法,返回到C.har的C2组件 。

实现步骤总结

  • 依赖解耦:通过将HAR包之间的直接依赖关系转移到HAP/HSP中配置,实现HAR包间依赖解耦 。
  • 路由管理:定义RouterModule模块,管理全局路由表和路由栈 。
  • 页面跳转:在需要跳转的页面中调用RouterModule的push方法,传递路由信息实现页面跳转。
  • 动态加载:在需要加载多个页面的HAR模块中定义初始化函数,通过路由信息动态加载页面 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏