HarmonyOS 鸿蒙Next API 12 NavPathStack使用问题

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next API 12 NavPathStack使用问题

APage 中放一个按钮点击后 push 到 BPage 为什么显示不是B页面的内容?而是一个带返回的空白页?用的是模拟器,是哪里写错了吗?
@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>

6 回复
这种情况一般有两种:
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(); }

已解决。需要配置router_map.json 还要Builder构造函数。二级页面还要嵌套Nav。需要太多了。不如router省事

针对HarmonyOS鸿蒙Next API 12中NavPathStack的使用问题,以下是一些可能的解决方案:

  1. 确保页面注册正确:在使用NavPathStack进行页面跳转前,请确保目标页面已在系统配置文件route_map.json中正确注册,并在module.json5中绑定了route_map.json的路径。
  2. 正确使用NavPathStack:在主页面的Navigation组件中,创建并传入一个NavPathStack对象。使用pushPath或pushPathByName方法进行页面跳转,确保传入的页面名称与route_map.json中注册的名称一致。
  3. 子页面使用NavDestination:子页面的根布局应使用NavDestination,而不是Navigation。在子页面的onReady方法中,通过context.pathStack获取父页面传递的NavPathStack对象。
  4. 检查API版本和系统兼容性:确保你的开发环境、设备系统版本与HarmonyOS API版本兼容。

如果以上方法均无法解决问题,可能是其他配置或代码问题。建议仔细检查相关配置和代码,或参考华为开发者官方文档和示例代码。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部