【关键字】
跨module包跳转 / Entry / HAP / Feature / Previewer / can't find this page / 页面路由(@ohos.router)/ router.pushUrl / 命名路由
【问题描述】
项目工程包含三个模块:
-
entry模块:包含2个页面Index1、Index2
-
library模块(HSP包):包含1个页面Index
-
feature模块(feature包):包含1个页面Index
工程中存在跨包跳转,跳转代码参考官网编写:
router.pushUrl({
url : '@bundle:com.***.myapplication/library/ets/pages/Index'
})
问题1:当前entry内部Index1可以跳转Index2,但Index2跳转HSP包的Index失败(Previewer模式和模拟器均失败),工具提示“can't find this page”。
问题2:使用模拟器,entry无法跳转到feature包页面。
【解决方案】
-
Previewer模式当前不支持跨module包跳转。
-
模拟器实现HSP包页面跳转,请确认是否完成如下配置:
-
在entry包中增加HSP包的引用
在使用方entry/feature模块的oh-package.json5文件中添加HSP模块引用,以引用名为“sharedlibrary”的HSP为例:
{ ... "dependencies": { "sharedlibrary": "file:../sharedlibrary" } }
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-har-import-0000001547293682
-
本地调试时将HSP模块一起加入打包
请按如下方法查看本地调试时是否将HSP模块加入运行:菜单栏选择“Run > Edit Configurations”,选择“Deploy Multi Hap”页签,勾选“Deploy Multi Hap Packages”,选择使用方模块(如entry)和HSP模块(如library),点击“OK”。
-
同时附上Demo供参考
-
entry模块:Index.ets
import router from '@ohos.router' @Entry @Component struct Index { build() { Column() { Text('Hello World1') .fontSize(50) .fontWeight(FontWeight.Bold) Button('跳转') .margin({top: 50}) .onClick(() => { router.pushUrl({ url: '@bundle:com.huawei.flexlaout.myapplication/library/ets/pages/Index' }) }) } .width('100%') .height('100%') } }
-
entry模块:oh-package-lock.json5
{ "name": "entry", "version": "1.0.0", "description": "Please describe the basic information.", "main": "", "author": "", "license": "", "dependencies": { "library": "file:../library" } }
-
library模块:Index.ets
@Entry @Component struct Index { build() { Row() { Column() { Text('Hello World2') .fontSize(50) .fontWeight(FontWeight.Bold) } .width('100%') } .height('100%') } }
-
-
-
entry和feature包间的跳转不支持使用router.pushUrl,可通过命名路由的方式跳转。