本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

一、鸿蒙应用开发中,HAR(静态共享包)和HSP(动态共享包)间的页面跳转,有着不同的路径配置规则依赖管理方式

特性 HAR(静态共享包) HSP(动态共享包)
核心跳转方式 命名路由 (pushNamedRoute 完整Bundle路径 (pushUrl
路径格式 路由名 (如 'MainPage' '@bundle:包名/模块名/路径/页面名' 
前置配置 在HAR页面使用 @Entry({routeName: '页面名'})  确保HSP模块已正确配置并随主包部署 
适用场景 依赖关系清晰、需要避免循环依赖的模块间跳转  需要运行时动态加载、模块独立性要求高的场景 

二、HAR包页面跳转

HAR包的页面跳转主要依赖命名路由

  1. 配置HAR页面:在HAR包中,跳转的页面组件使用@Entry({routeName: '路由名'})进行装饰。

// 在HAR包的页面文件中
@Entry({ routeName: 'StaticPage' }) // 定义命名路由
@Component
export struct StaticPage {
  // 页面代码
}

     2. 跳转到HAR页面:在需要跳转的地方,使用router.pushNamedRoute()方法,并指定在HAR中定义的路由名

import router from '@ohos.router';
//导入页面文件
import "library_static/src/main/ets/components/StaticPage" //静态导入
//import('library_static/src/main/ets/components/StaticPage') //也可以动态导入

// 在Entry或Feature模块中跳转
router.pushNamedRoute({
  name: 'StaticPage', // 与HAR中定义的路由名一致
  params: { key: 'value' } // 可选参数
})

备注:HAR包页面不能直接使用pushUrl跳转,必须采用命名路由方式

三、HSP包页面跳转

HSP包的页面跳转则必须使用完整的Bundle路径

  1. 跳转到HSP页面:使用router.pushUrl()方法,其中url参数需严格按照'@bundle:包名(bundleName)/模块名(moduleName)/路径/页面所在的文件名(不加.ets后缀)'的格式编写

import router from '@ohos.router';

// 从Entry或Feature模块跳转到HSP页面
const bundleName = (getContext(this) as common.UIAbilityContext).applicationInfo.name;

router.pushUrl({
  url: `@bundle:${bundleName}/library/ets/pages/SharedPage` // 完整的Bundle路径
}).then(() => {
  // 跳转成功回调
}).catch(err => {
  // 跳转失败处理
  console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`);
})

注意:HSP中的页面同样需要使用@Entry装饰器,不需要routeName参数(其实也可以按照命名路由方式跳转)。

HSP内的相互跳转及返回

  • HSP跳转到HSP:同样使用上述的完整Bundle路径格式。

  • HSP内返回:使用router.back()。如果需要返回到特定的HAP页面,url可以写为'pages/Index'这样的相对路径;如果返回HSP页面,则需要使用完整的Bundle路径。

总结

特性 HAR 包跳转 HSP 包跳转
依赖时机 编译时依赖 运行时依赖
是否需要导入 必须导入目标页面 无需导入目标页面
跳转方式 pushNamedRoute({name: '路由名'}) pushUrl({url: '完整路径'})
路径配置 使用路由名称 使用完整Bundle路径
类型安全 编译时类型检查 运行时解析,无编译时类型检查
耦合度 紧耦合(编译时需要) 松耦合(运行时解析)

建议:

  • 简单跳转推荐命名路由方案,代码更简洁
  • route页面栈最大容量为32个页面,超出需要调用clear()方法清理
  • 需要复杂页面栈管理时推荐Navigation方案
  • 若涉及多HAP跳转,建议改用HSP动态共享包
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐