HarmonyOS鸿蒙Next中ARK UI自定义弹窗嵌套,第二层弹窗使用this.controller.close()报错

HarmonyOS鸿蒙Next中ARK UI自定义弹窗嵌套,第二层弹窗使用this.controller.close()报错

如题,在弹窗嵌套(CustomDialog打开CustomDialog),第二层被打开的弹窗无法使用this.controller.close(),报错信息如下:

[phone][Ace  ERROR] 02/28 22:24:43 22716 [qjs_utils.cpp(JsStdDumpErrorAce)-(0)] [Engine Log] [DUMP] TypeError: cannot read property 'close' of undefined

代码如下:

@CustomDialogstruct myCustomDialog {
  controller: CustomDialogController
  private text: string
  private openNextDialog() {
    var DeleteCustomDialogController: CustomDialogController = new CustomDialogController({
      builder: myCustomDialog({ text: '弹窗2' })
    })
    DeleteCustomDialogController.open()
  }
  build() {
    Column() {
      Text(this.text)
        .fontSize(30)
      Row() {
        Button('取消')
          .onClick(() => {
            this.controller.close()
          })
        Button('打开')
          .onClick(() => {
            this.controller.close()
            this.openNextDialog()
          })
      }
    }
  }
}
@Entry
@Componentstruct CustomDialogUser {
  DeleteCustomDialogController: CustomDialogController = new CustomDialogController({
    builder: myCustomDialog({ text: '弹窗1' })
  })
  build() {
    Column() {
      Button('test')
        .onClick(() => {
          this.DeleteCustomDialogController.open()
        })
    }.width('100%').margin({ top: 5 })
  }
}

更多关于HarmonyOS鸿蒙Next中ARK UI自定义弹窗嵌套,第二层弹窗使用this.controller.close()报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

楼主您好,请使用23039.rar(后缀去掉)文件中的写法

更多关于HarmonyOS鸿蒙Next中ARK UI自定义弹窗嵌套,第二层弹窗使用this.controller.close()报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


请问23039.rar是什么文件,

Change text

click me

Whether to change a text?

[cancel] [confirm]

Callback when the first button is clicked

Callback when the second button is clicked

Click the callback in the blank area

姓名: 张三
职业: 软件工程师
简介: 拥有超过十年的软件开发经验,擅长Java和Python。

楼主您好,该问题已反馈给开发人员,请耐心等待,感谢您的支持

图示没有展示完,在这里补上

cxpuy-cq9qc.gif

在HarmonyOS鸿蒙Next中,ARK UI自定义弹窗嵌套时,第二层弹窗使用this.controller.close()报错,可能是因为this.controller未正确绑定到第二层弹窗的控制器。建议检查以下几点:

  1. 控制器绑定:确保第二层弹窗的控制器已正确初始化并绑定到当前上下文。
  2. 作用域问题:确认this指向的是第二层弹窗的实例,而非第一层弹窗。
  3. 生命周期:确保在弹窗生命周期内调用close()方法,避免在弹窗未完全初始化或已销毁时调用。

如果问题仍未解决,建议使用调试工具检查this.controller的状态,或参考官方文档确认API使用方式。

回到顶部