HarmonyOS鸿蒙Next中promptAction.openCustomDialog自定义弹窗在非UI类中调用问题
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
使用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({
// 自定义弹窗配置
});
});
}
}
通过TaskDispatcher
将openCustomDialog
调度到UI线程,确保其在正确的线程执行。
在HarmonyOS鸿蒙Next中,promptAction.openCustomDialog
用于在UI线程中打开自定义弹窗。若在非UI类中调用,需确保操作在UI线程执行,可通过TaskDispatcher
切换到主线程。示例代码如下:
TaskDispatcher uiTaskDispatcher = getUITaskDispatcher();
uiTaskDispatcher.syncDispatch(() -> {
promptAction.openCustomDialog(customDialogConfig);
});
确保customDialogConfig
正确配置,否则弹窗可能无法正常显示。