HarmonyOS 当前有弹窗NavDestinationMode.DIALOG,调用NavPathStack.pop方法之后,检查getAllPathName确认弹窗移除了,但是弹窗这个component的aboutToDisappear不回调,阻塞业务主路径。不是必现的,有什么思路吗

HarmonyOS
2025-01-09 16:20:10
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

pageInfos先出栈再入栈,等同于没操作,所以没有触发abouttodisappear和onshown,参考示例如下:

@Builder
export function PageOneBuilder123() {
  MyDialog()
}

@Component
struct MyDialog {
  @State message: string = 'Hello12345';
  pageInfos: NavPathStack = new NavPathStack()

  aboutToAppear(): void {
    console.log('--1 aboutToAppear')
  }

  aboutToDisappear(): void {
    console.log('--2 aboutToDisappear')
  }

  build() {
    Column() {
      NavDestination() {
        Column({ space: 10 }) {
          Text(this.message)
          Button('关闭、立即打开弹窗').onClick(() => {
            console.log('1 this.pageInfos.size()=' + this.pageInfos.size())
            // 先关闭弹窗
            this.pageInfos.pop();
            console.log('2 this.pageInfos.size()=' + this.pageInfos.size())
            // 立马再打开弹窗
            this.pageInfos.pushPathByName('pageOne123', null)
            console.log('3 this.pageInfos.size()=' + this.pageInfos.size())
            console.log('4 ' + JSON.stringify(this.pageInfos.getAllPathName()))
          })
        }
      }
      .mode(NavDestinationMode.DIALOG)
      .onReady((context: NavDestinationContext) => {
        this.pageInfos = context.pathStack;
        console.log("-- onReady" + JSON.stringify(context.getConfigInRouteMap()))
      })
      .onShown(() => {
        console.log('-- onShown')
      })
      .onHidden(() => {
        console.log('-- onHidden')
      })
      .backgroundColor(Color.Pink)
    }
    .height('100%')
    .width('100%')
  }
}

// Index.ets
@Entry
@Component
struct Index0816 {
  pageInfos: NavPathStack = new NavPathStack()

  build() {
    Navigation(this.pageInfos) {
      Column() {
        Button('pushPath', { stateEffect: true, type: ButtonType.Capsule })
          .width('80%')
          .height(40)
          .margin(20)
          .onClick(() => {
            this.pageInfos.pushPath({ name: 'pageOne123' }) //将name指定的NavDestination页面信息入栈
          })
      }
    }.title('NavIndex')
    .mode(NavigationMode.Auto)
  }
}
分享
微博
QQ
微信
回复
2025-01-09 19:21:13
相关问题
HarmonyOS NavDestinationMode.DIALOG
216浏览 • 1回复 待解决
HarmonyOS dialog弹窗跳转问题
294浏览 • 1回复 待解决
HarmonyOS dialog弹窗相关问题
791浏览 • 1回复 待解决
Dialog弹窗与模块化问题
681浏览 • 1回复 待解决
TextInputonBlur方法不回
1547浏览 • 1回复 待解决
HarmonyOS 自定义弹窗如何更新弹窗UI
416浏览 • 1回复 待解决
HarmonyOS拉起弹窗方式那几种
2316浏览 • 1回复 待解决