HarmonyOS鸿蒙Next中promptAction.openCustomDialog自定义弹窗在非UI类中调用问题

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS鸿蒙Next中promptAction.openCustomDialog自定义弹窗在非UI类中调用问题

SDK 5.0.0(12) IDE:Build Version: 5.0.3.600, built on August 7, 2024 在非UI class中使用打开自定义弹窗

promptAction.openCustomDialog({
  builder: MyGlobalBuilderFunction(),
  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) => {
  console.log('')
})  
@ 
Builder

function MyGlobalBuilderFunction() {
  Column() {
    Text('弹窗').fontSize(30)
    Row({ space: 50 }) {
      Button("确认")
        .onClick(() => { 
        })
      Button("取消")
        .onClick(() => { 
        })
    }
  }.height(200).padding(5).justifyContent(FlexAlign.SpaceBetween)
}

报错:Cannot read property observeComponentCreation2 of undefined

问题和这个链接一样。 https://developer.huawei.com/consumer/cn/forum/topic/0203154980839972156


更多关于HarmonyOS鸿蒙Next中promptAction.openCustomDialog自定义弹窗在非UI类中调用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

使用promptAction.openCustomDialog自定义弹窗,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5#promptactionopencustomdialog11

其中需要传入的参数类型为CustomDialogOptions,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5#customdialogoptions11

其中build的类型为CustomBuilder,其为用户生成的自定义组件,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-types-V5#custombuilder8

参考@Builder装饰的文档可知,自定义构建函数分为 自定义组件内自定义构建函数 和 全局自定义构建函数,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-builder-V13#装饰器使用说明

综合以上信息可知,promptAction.openCustomDialog打开的自定义弹窗的构建函数,只能是用户自定义组件内自定义的构建函数,如果您想使用全局自定义构建函数,可以在组件内的构造函数中引用全局构造函数,您可以参考 promptAction.openCustomDialog 文档给出的第二个示例:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5#promptactionopencustomdialog11

更多关于HarmonyOS鸿蒙Next中promptAction.openCustomDialog自定义弹窗在非UI类中调用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,promptAction.openCustomDialog用于打开自定义弹窗,通常是在UI线程中调用。若在非UI类中调用,需确保操作在UI线程执行,否则可能引发异常。可使用TaskDispatcher将任务调度到UI线程。例如:

import promptAction from '@ohos.promptAction';
import { TaskDispatcher, globalTaskDispatcher } from '@ohos.taskDispatcher';

class NonUIClass {
    openDialog() {
        const uiTaskDispatcher: TaskDispatcher = globalTaskDispatcher.getUITaskDispatcher();
        uiTaskDispatcher.asyncDispatch(() => {
            promptAction.openCustomDialog({
                // 自定义弹窗配置
            });
        });
    }
}

通过TaskDispatcheropenCustomDialog调度到UI线程,确保其在正确的线程执行。

在HarmonyOS鸿蒙Next中,promptAction.openCustomDialog用于在UI线程中打开自定义弹窗。若在非UI类中调用,需确保操作在UI线程执行,可通过TaskDispatcher切换到主线程。示例代码如下:

TaskDispatcher uiTaskDispatcher = getUITaskDispatcher();
uiTaskDispatcher.syncDispatch(() -> {
    promptAction.openCustomDialog(customDialogConfig);
});

确保customDialogConfig正确配置,否则弹窗可能无法正常显示。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!