HarmonyOS 鸿蒙Next 创建并打开一个CustomDialog,但controller值一直是undefined

发布于 1周前 作者 gougou168 最后一次编辑是 5天前 来自 鸿蒙OS

创建并打开一个CustomDialog, 但是这个CustomDialog里定义的controller的值一直是undefined 示例代码

  1. CustomDialog的代码
@CustomDialog
export struct MyCustomDialog {
controller: CustomDialogController

build() {
Button('close').onClick(() => {
if (this.controller) {
this.controller.close()
}
})
}
}
  1. 在页面打开此CustomDialog的代码
const controller = new CustomDialogController({
builder: MyCustomDialog({}),
})
controller.open()
  1. 点击MyCustomDialog里的关闭按钮会抛出异常。
Error message:Cannot read property close of undefined
Stacktrace:
at anonymous (entry/src/main/ets/pages/MyCustomDialog.ets:7:7)

更多关于HarmonyOS 鸿蒙Next 创建并打开一个CustomDialog,但controller值一直是undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
请参考如下试下
深色代码主题
复制
@CustomDialog

export struct MyCustomDialog {

controller: CustomDialogController

build() {

<span class="hljs-title class_">Column</span>() {

  <span class="hljs-title class_">Text</span>(<span class="hljs-string">'我是弹窗'</span>)

  <span class="hljs-title class_">Button</span>(<span class="hljs-string">'close'</span>)

    .<span class="hljs-title function_">onClick</span>(<span class="hljs-function">() =&gt;</span> {

      <span class="hljs-keyword">if</span> (<span class="hljs-variable language_">this</span>.<span class="hljs-property">controller</span>) {

        <span class="hljs-variable language_">this</span>.<span class="hljs-property">controller</span>.<span class="hljs-title function_">close</span>()

      }

    })

}

}

}

@Entry

@Component

struct Index {

DialogController: CustomDialogController = new CustomDialogController({

<span class="hljs-attr">builder</span>: <span class="hljs-title class_">MyCustomDialog</span>()

})

build() {

<span class="hljs-title class_">Column</span>() {

  <span class="hljs-title class_">Button</span>(<span class="hljs-string">'click'</span>)

    .<span class="hljs-title function_">onClick</span>(<span class="hljs-function">() =&gt;</span> {

      <span class="hljs-variable language_">this</span>.<span class="hljs-property">DialogController</span>.<span class="hljs-title function_">open</span>()

    })

}

.<span class="hljs-title function_">height</span>(<span class="hljs-string">'100%'</span>)

.<span class="hljs-title function_">width</span>(<span class="hljs-string">'100%'</span>)

}

}

更多关于HarmonyOS 鸿蒙Next 创建并打开一个CustomDialog,但controller值一直是undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,创建并打开一个CustomDialog时,如果遇到controller值一直是undefined的问题,通常是因为Dialog的创建或控制器的初始化不当。以下是可能的解决方法:

  1. 确保Dialog正确创建

    • 使用CustomDialog的构造函数正确创建Dialog实例。
    • 在创建时,确保所有必要的参数都已正确传递,特别是那些用于初始化控制器的参数。
  2. 初始化Controller

    • 检查是否在Dialog创建后立即初始化了controller
    • 确保controller的初始化代码在Dialog的onCreate方法中被调用,或者在对Dialog进行显示操作之前。
  3. 正确使用Controller

    • 在Dialog显示后,通过getController方法获取controller对象。
    • 如果getController返回undefined,可能是因为Dialog尚未完成创建或初始化。
  4. 检查异步代码

    • 如果Dialog的创建或显示涉及异步操作,确保controller的访问发生在异步操作完成后。
    • 使用回调函数、Promises或async/await确保异步代码的正确执行顺序。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部