HarmonyOS 鸿蒙Next中Har文件内部的page1、page2之间如何跳转
HarmonyOS 鸿蒙Next中Har文件内部的page1、page2之间如何跳转 Har文件内部的page1、page2之间如何跳转?有什么约束限制吗?
我们用的HMRouter,只要在包里面配置好脚本,想在那个包跳转都行,用官方的组件导航(Navigation)的话配置好路由表,分包只是换了个位置而已
参考文档:
OpenHarmony三方库中心仓
- 组件导航(Navigation)主要用于实现页面间以及组件内部的页面跳转,支持在不同组件间传递跳转参数,提供灵活的跳转栈操作,从而更便捷地实现对不同页面的访问和复用。
- 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。Router模块通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。 没有区别
期待HarmonyOS能在未来推出更多针对企业用户的解决方案。
使用系统路由表实现的话,没有约束。参考这个链接进行配置,然后给每一个Har包配置好 router_map.json,在需要跳转的地方和同包内使用Navigation使用方式一样:
this.pageInfos.pushPathByName('GoHarAPageOne', null);
可以参考这个官方示例项目,非常清晰:system-router-map.git
你就当Har不存在直接用就行,完全不需要担心各种跳转问题。
在HarmonyOS Next中,Har包内的page1与page2之间跳转,可通过页面路由router实现。在page1的代码中,使用router.pushUrl方法,并指定目标页面的路径。路径格式通常为模块名加页面名,例如'pages/page2'。需确保在module.json5配置文件中正确定义了页面路由。此方法适用于同一Har包内的页面导航。
在HarmonyOS Next中,Har(HarmonyOS Ability Resources)包内的Page(页面)之间进行跳转,其核心机制与主工程内或跨Har包的页面跳转基本一致,主要使用router模块的API。但由于Har包是独立的编译和部署单元,在实践时需要注意其模块化特性带来的约束。
核心跳转方法
假设你的Har包内有两个页面:page1和page2,它们都已正确配置在对应Module的module.json5配置文件中。
在page1的代码中,你可以使用以下方式跳转到page2:
// 方式一:通过url直接跳转,推荐在Har包内部使用
import { router } from '@kit.ArkUI';
router.pushUrl({
url: 'pages/page2' // 注意路径
}).then(() => {
// 跳转成功回调
}).catch((err) => {
// 跳转失败处理
});
// 方式二:如果需要传递参数
router.pushUrl({
url: 'pages/page2',
params: { key1: 'value1', key2: 123 } // 传递参数
});
在page2中,可以通过router.getParams()获取传递的参数。
关键约束与注意事项
-
路径规则:在Har包内部进行跳转时,
url路径通常直接写pages/[页面名]即可,无需包含Har包的名称或层级。这是因为在Har包自身的编译上下文中,其页面路径是相对于该模块的根目录来解析的。这与从主工程或其他Har引用该页面时需写的路径(如@[har包名]/pages/page2)不同。 -
配置文件:确保
page1和page2都在其所属Har模块的src/main/resources/base/profile/module.json5文件中正确声明在"pages"字段下。这是页面能被路由系统识别的前提。 -
UIAbility上下文:Har包内的页面必须归属于一个UIAbility。跳转的页面必须与当前页面在同一个UIAbility内。Har包通常作为资源模块被主工程的UIAbility或自己的UIAbility所加载,跨UIAbility的跳转需要不同的方式(如使用
want启动)。 -
模块独立性:Har包是独立的,其内部的页面跳转逻辑应封装在Har包内部。主工程或其他Har包若要跳转到此Har包的页面,需要使用完整的、包含Har包别名的路径(例如:
@myhar/pages/page2),这属于跨模块跳转。 -
编译与打包:Har包在编译时,其页面资源会被打包到该Har中。确保跳转的目标页面已经随Har包正确编译和部署,否则会导致运行时找不到页面的错误。
总结
在HarmonyOS Next的Har文件内部,页面跳转使用标准的router.pushUrl方法,路径使用相对简单的pages/xxx形式。主要约束在于所有页面需在同一个UIAbility上下文内,且必须在module.json5中正确定义。只要Har包自身配置正确,其内部页面间的跳转与普通工程内的跳转体验无异。


