HarmonyOS Navigation先pop再push新页面失败

页面栈流程如下:

A页面–pushDestinationByName–>B页面–pop回–>A页面–>收到返回后立刻pop关闭自己并且push—>C页面。如果A/B/C对应的都是同一个组件,用相同的name命名会发现C页面无法打开,不是相同name则没问题。

import { NavigationManager } from '@cmb/router';
import hilog from '@ohos.hilog';

@Component
export struct Page {
  build() {
    NavDestination() {
      RelativeContainer() {
        Button('跳转至测试页')
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .alignRules({
            center: { anchor: '__container__', align: VerticalAlign.Center },
            middle: { anchor: '__container__', align: HorizontalAlign.Center }
          })
      }
      .height('100%')
      .width('100%')
      .onClick(() => {
        NavigationManager.getNavPathStack().pushDestinationByName('web', undefined)
      })
    }
    .onAppear(() => {
      hilog.debug(1, "NavigationTest", "onAppear0");
    })
    .onDisAppear(() => {
      hilog.debug(1, "NavigationTest", "onDisAppear0");
    })
    .onShown(() => {
      hilog.debug(1, "NavigationTest", "onShow0");
    })
    .onHidden(() => {
      hilog.debug(1, "NavigationTest", "onHidden0");
    })
    .title("首页")
  }
}

@Entry
@Component
struct Index {
  @State message: string = '测试Navigation生命周期';

  aboutToAppear() {
    let modules: string[] = ["@cmb/module1"]
    modules.forEach(async (value: string, index: number, array: string[]) => {
      let ns: ESObject = await import(value);
      ns.dynamicImport("");
    })
  }

  @Builder
  routerMap(builderName: string, param: object) {
    // Obtain the WrappedBuilder object based on the module name, create a page through the builder interface, and import the param parameter.
    NavigationManager.getBuilder(builderName).builder(param);
  };

  build() {
    Navigation(NavigationManager.getNavPathStack()) {
      NavDestination() {
        Page().width("100%").height("100%")
      }
      .onShown(() => {
        console.log("首页onShow")
      })
      .onHidden(() => {
        console.log("首页onHidden")
      })
      .onAppear(() => {
        console.log("首页onAppear")
      })
    }
    .mode(NavigationMode.Stack)
    .hideToolBar(true)
    .hideBackButton(true)
    .hideTitleBar(true)
    .navDestination(this.routerMap)
  }
}
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

1、pop+push替换为replace:

NavigationManager.getNavPathStack().replacePathByName('web', { state: STATE_RESULT_C })

2、延时操作:

setTimeout(() => {
  NavigationManager.getNavPathStack().pushDestinationByName('web', { state: STATE_RESULT_C })
}, 1000)

3.Navigation强制新实例跳转。

分享
微博
QQ
微信
回复
1天前
相关问题
如何更新页面列表数据
6993浏览 • 1回复 待解决
HarmonyOS 数据改变未刷新页面
733浏览 • 0回复 待解决
dialog跳转新页面返回后dialog关闭
298浏览 • 1回复 待解决
怎么在进度条更新的时候刷新页面
4712浏览 • 1回复 待解决
HarmonyOS 如何关闭键盘 关闭弹窗
457浏览 • 1回复 待解决