HarmonyOS 在@CustomDialog中是否会支持@ComponentV2相关的状态管理?

在@CustomDialog中是否会支持@ComponentV2相关的状态管理由于@ComponentV2相关的状态管理更为便捷好用一些,但自定义弹窗貌似暂时还不能支持,请问这个有计划吗?或者如何改造?

阅读 518
1 个回答

@ComponentV2状态管理还在完善开发中,后续请关注下:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-new-componentv2-V5

自定义弹窗我们推荐使用openCustomDialog,具体参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5\#promptactionopencustomdialog11

请参考一下示例:

import promptAction from '@ohos.promptAction'
@Entry
@ComponentV2
struct OpenCustomDialogPage {
  private customDialogComponentId: number = 0
  @Local num:number = 0

  @Builder customDialogComponent( ) {
    Column() {
      Text('弹窗').fontSize(30)
      Text(this.num.toString()).fontSize(30)
        .onClick(()=>{
          console.log(`num----${this.num}`)
          this.num++
        })
      Row({ space: 50 }) {
        Button("确认").onClick(() => {
          promptAction.closeCustomDialog(this.customDialogComponentId)
        })
        Button("取消").onClick(() => {
          promptAction.closeCustomDialog(this.customDialogComponentId)
        })
      }
    }.height(200).padding(5).justifyContent(FlexAlign.SpaceBetween)
  }

  build() {
    Column({ space: 20 }) {
      Text(this.num.toString())
        .fontSize(50)
        .onClick(()=>{
          this.num++
        })
      Text('组件内弹窗')
        .fontSize(30)
        .onClick(() => {
          promptAction.openCustomDialog({
            builder: () => {
              this.customDialogComponent()
            },
            onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
              console.info("reason" + JSON.stringify(dismissDialogAction.reason))
              console.log("dialog onWillDismiss")
              if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {
                dismissDialogAction.dismiss()
              }
              if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
                dismissDialogAction.dismiss()
              }
            }
          }).then((dialogId: number) => {
            this.customDialogComponentId = dialogId
          })
        })
    }
    .width('100%')
    .height('100%')
  }
}