HarmonyOS鸿蒙Next中在arkts类中想调用自定义弹窗
HarmonyOS鸿蒙Next中在arkts类中想调用自定义弹窗
在类的方法用promptAction.openCustomDialog
,把build
写在类外面试了不行,会闪退。
3 回复
参考demo:
import { promptAction } from '@kit.ArkUI';
export class GlobalContext {
private constructor() {}
private static instance: GlobalContext;
private _objects = new Map<string, Object>();
public static getContext(): GlobalContext {
if (!GlobalContext.instance) {
GlobalContext.instance = new GlobalContext();
}
return GlobalContext.instance;
}
getObject(value: string): Object | undefined {
return this._objects.get(value);
}
setObject(key: string, objectClass: Object): void {
this._objects.set(key, objectClass);
}
}
let customDialogId: number = 0
@Builder
export function customDialogBuilder(content: String) {
Column() {
Text('弹窗').fontSize(20).height("30%")
Text('失败原因:失败原因!').fontSize(16).height("30%")
Row() {
Button("确认").onClick(() => {
promptAction.closeCustomDialog(customDialogId)
})
Blank().width(50)
Button("取消").onClick(() => {
promptAction.closeCustomDialog(customDialogId)
})
}
.margin({ top: 30 })
}
.height(200).padding(5)
}
export function testPromptDialog() {
const that = GlobalContext.getContext().getObject('UIContext') as UIContext;
if (that) {
promptAction.openCustomDialog({
builder: customDialogBuilder.bind(that, "网络请求失败!")
})
.then((dialogId: number) => {
customDialogId = dialogId;
})
}
}
@Entry
@Component
struct hwmPage {
aboutToAppear(): void {
GlobalContext.getContext().setObject('UIContext', this)
}
build() {
Row() {
Column() {
Button("promptAction弹窗")
.onClick(() => {
testPromptDialog()
})
}
.width('100%')
}
.height('100%')
}
}
更多关于HarmonyOS鸿蒙Next中在arkts类中想调用自定义弹窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,如果你想在ArkTS类中调用自定义弹窗,可以通过使用@CustomDialog
装饰器来定义自定义弹窗组件,然后在ArkTS类中通过controller.show()
方法来显示弹窗。
首先,定义自定义弹窗组件:
@CustomDialog
struct MyCustomDialog {
controller: CustomDialogController
build() {
Column() {
Text('This is a custom dialog')
Button('Close').onClick(() => {
this.controller.close()
})
}
}
}
然后,在ArkTS类中调用自定义弹窗:
class MyClass {
private dialogController: CustomDialogController = new CustomDialogController({
builder: MyCustomDialog(),
cancel: () => {
console.log('Dialog canceled')
},
autoCancel: true
})
showDialog() {
this.dialogController.show()
}
}
在MyClass
中,你可以通过调用showDialog
方法来显示自定义弹窗。CustomDialogController
用于控制弹窗的显示和关闭。
在HarmonyOS鸿蒙Next中,使用ArkTS调用自定义弹窗的步骤如下:
-
创建自定义弹窗组件:使用
@CustomDialog
装饰器定义一个弹窗组件,并在build
方法中编写UI布局。 -
在业务类中调用弹窗:通过
CustomDialogController
实例化弹窗,并调用open()
方法显示弹窗。
例如:
@CustomDialog
struct MyDialog {
// 弹窗内容
}
class MyClass {
private dialogController: CustomDialogController = new CustomDialogController({
builder: MyDialog(),
});
showDialog() {
this.dialogController.open();
}
}
通过showDialog()
方法即可触发自定义弹窗显示。