HarmonyOS鸿蒙Next中使用navigation模块进行页面跳转时代码未报错,虚拟设备运行正常,但未能实现页面跳转
HarmonyOS鸿蒙Next中使用navigation模块进行页面跳转时代码未报错,虚拟设备运行正常,但未能实现页面跳转
【设备信息/系统版本】:HarmonyOS 5.0.5
【API版本】: api17
【DevEco Studio版本】: 5.0.13.200
【问题描述】:
使用navigation模块中的pageStack.pushPathByName进行跳转的时候,日志提示已经执行跳转,但是页面却没有变化,另外日志中记录了以下三条wrong:
1、W:[] GetDecorHeight(2235): Get app window decor height failed
2、W:18:FFRTQosApplyForOther:244 tid 11634, Interrupted system call, ret:-1, eno:4
3、W:19:~WorkerThread:72 to exit, qos[4]
PS:另外每一个项目有且只能有一个@Entry修饰器吗?为什么存在多个页面时,有些页面删除@Entry修饰器会报错:A page configured in ‘main_pages.json or build-profile.json5’ must have one and only one ‘@Entry’ decorator. <ArkTSCheck>,但又不影响正常执行??
【问题相关代码】:
page1:
page2
【尝试过的方法和结果】:在page2中添加生命周期管理:
【最终目标】:
1、找出页面未能跳转的具体原因;
2、提出优化及相关知识的建议。
更多关于HarmonyOS鸿蒙Next中使用navigation模块进行页面跳转时代码未报错,虚拟设备运行正常,但未能实现页面跳转的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你的路由方式使用的是组件路由(Navigation路由区别于Router,前者有且仅有一个@Entry页面),
以下是路由栈信息的代码,它必须由@Entry开始往下层使用到的地方传递(@Provide和@Consume),或者使用全局状态(AppStorage)的方式进行同步
在@Entry页面中:
[@Provide](/user/Provide)("pageInfo")
pageInfo: NavPathStack = new NavPathStack()
在使用到路由栈的页面:
[@Consume](/user/Consume)('pageInfo')
pageInfo: NavPathStack
被跳转的页面的根节点必须被NavDestination包裹,且须声明一个全局自定义构建函数
@Component
struct XxxView {
build() {
NavDestination() {
// 页面内容
}
.hideTitleBar(true)
.hideToolBar(true)
}
}
@Builder
export function XxxViewBuilder() {
XxxView()
}
在profile/xxx.json中注册路由信息
{
"routerMap": [
{
"name": "XxxView",
"pageSourceFile": "src/main/ets/view/XxxView.ets",
"buildFunction": "XxxViewBuilder"
}
]
}
在 module.json5 中添加以下字段
{
"module": {
// ...
"routerMap": "$profile:Xxx",// Xxx为你profile文件夹下注册路由的Xxx.json文件名
// ...
}
}
把 main_pages.json 文件删掉就行了,原因是你在这个文件中注册了这个页面(这个页面必须是带@Entry装饰器的页面),但是你又把这个页面的 @Entry 删掉了,所以会报错。
更多关于HarmonyOS鸿蒙Next中使用navigation模块进行页面跳转时代码未报错,虚拟设备运行正常,但未能实现页面跳转的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
将其他没有带 @Entry
的页面移出 pages
文件夹,不要放到一起,main_pages.json
会识别到。
完美解决,非常感谢你!!!
鸿蒙Next中navigation模块页面跳转失败可能原因:
- 路由配置未在main_pages.json中正确声明
- 目标页面路径拼写错误或未使用绝对路径
- 页面生命周期未正确处理,如未调用onPageShow
- 页面栈管理异常导致跳转被拦截
- 组件类型不匹配,如使用CustomDialog替代Page
检查要点:
- 确保目标页面已注册
- 路径格式应为"pages/xxx/xxx"
- 使用router.pushUrl方法时确认option参数正确,
关于页面跳转失败的问题,可能原因如下:
- 路由配置问题:
- 检查main_pages.json中是否正确定义了目标页面路径
- 确保page2的路径与pushPathByName参数完全匹配(注意大小写)
- 页面生命周期问题:
- 虽然添加了生命周期函数,但建议检查onPageShow是否被触发
- 可以尝试在page2的aboutToAppear中添加日志确认页面加载
- @Entry修饰器问题:
- 每个在main_pages.json中配置的页面必须且只能有一个@Entry修饰器
- 报错但能运行可能是因为IDE缓存,建议执行Build -> Clean Project
- 日志中的警告:
- GetDecorHeight错误通常不影响功能,可能是模拟器问题
- FFRTQos警告属于系统级线程调度问题,一般不影响应用逻辑
建议检查:
- 确认page2的路由路径是否在router.pushPathByName中正确使用
- 在page2的aboutToAppear中添加console.log确认页面加载
- 检查是否在page1的跳转回调中有页面拦截逻辑