HarmonyOS 鸿蒙Next API 12 NavPathStack使用问题
HarmonyOS 鸿蒙Next API 12 NavPathStack使用问题
@Entry
@Component
export struct APage {
@State message: string = ‘点我跳转到下一页’;
pageStack: NavPathStack = new NavPathStack()
build() {
Navigation(this.pageStack) {
RelativeContainer() {
Text(this.message)
.id(‘APageHelloWorld’)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: ‘container’, align: VerticalAlign.Center },
middle: { anchor: ‘container’, align: HorizontalAlign.Center }
})
.onClick((event) => {
this.pageStack.pushPath({
name: ‘BPage’
})
})
}
.height(‘100%’)
.width(‘100%’)
}
.hideTitleBar(true)
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
1:找不到路径,这就要找你对应跳转的B页面有没有做好了注册等相关配置。
2:B页面没有实现NavDestination节点。
我看你写了关于NavPathStack的帖子,是否帮我们解决bug. “借个道,楼主,如果你把B页面放个Web组件,第一次A跳转到B页面会Web页面正常的,然后返回A再跳转B,那这时候Web页面变形了,顶部内容少了10%。可以帮忙验证下。谢谢”
不会啊,如果是不一样了,得看看是不是有什么参数被复用了:
@Component export struct WebPage { controller: web_webview.WebviewController = new web_webview.WebviewController(); @State navHeight: number = px2vp(global.getObject<number>(Const.NAV_HEIGHT_PX)); @State url: string | Resource = ‘’; @State title: string = ‘’;
loadData(data: Record<string, Object>): void { log.i(TAG, 'loadData: ’ + JSON.stringify(data)); if (data === undefined) { return; } this.title = data[‘title’] !== undefined ? data[‘title’] as string : ‘’; const url = data[‘url’]; if (url === undefined) { return; } if (url == ‘’) { this.url = url as string; return; } this.url = url as Resource; }
build() { NavDestination() { Column() { Header({ title: this.title, onKeyBack: global.blockQuickClick(() => { RouterUtil.pop() }) }) Web({ src: this.url, controller: this.controller }) .width(‘100%’) .layoutWeight(1) .backgroundColor($r(‘app.color.theme_default’)) Line().height(this.navHeight).width(1).visibility(Visibility.Hidden) } .height(‘100%’) .backgroundColor($r(‘app.color.bg_base’)) .justifyContent(FlexAlign.Start) } .hideTitleBar(true) .mode(NavDestinationMode.STANDARD) .onReady(cxt => { this.loadData(cxt.pathInfo.param as Record<string, Object>); }) } }
@Builder export function RegisterBuilder(): void { WebPage(); }
针对HarmonyOS鸿蒙Next API 12中NavPathStack的使用问题,以下是一些可能的解决方案:
- 确保页面注册正确:在使用NavPathStack进行页面跳转前,请确保目标页面已在系统配置文件route_map.json中正确注册,并在module.json5中绑定了route_map.json的路径。
- 正确使用NavPathStack:在主页面的Navigation组件中,创建并传入一个NavPathStack对象。使用pushPath或pushPathByName方法进行页面跳转,确保传入的页面名称与route_map.json中注册的名称一致。
- 子页面使用NavDestination:子页面的根布局应使用NavDestination,而不是Navigation。在子页面的onReady方法中,通过context.pathStack获取父页面传递的NavPathStack对象。
- 检查API版本和系统兼容性:确保你的开发环境、设备系统版本与HarmonyOS API版本兼容。
如果以上方法均无法解决问题,可能是其他配置或代码问题。建议仔细检查相关配置和代码,或参考华为开发者官方文档和示例代码。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。