HarmonyOS鸿蒙Next中如何实现一个自定义CustomDialogControllerOptions的builder方法?
HarmonyOS鸿蒙Next中如何实现一个自定义CustomDialogControllerOptions的builder方法?
系统提供的自定义弹窗参数里有一个: builder: any;
通过它传入一个自定义的弹窗组件,使用例子:
dialogController: CustomDialogController = new CustomDialogController({
builder: CustomeInfoDialog({ param1: '参数1', param2: '参数2' })
})
通过dialogController可以弹出自定义弹窗CustomeInfoDialog,以及所使用的param1、 param2两个参数。
问题:
我现在想写一个类似于CustomDialogController的控制器,里面也可以传递一个builder,去加载自定义弹窗,我该如何实现?
我知道一种弹出自定义弹窗的实现方式:
export class CustomeDialog {
static open(params: ParamsInterface){//ParamsInterface,是一些自定义参数
let uiContext: UIContext | undefined = AppStorage.get(LOCAL_UI_CONTEXT);
let contentNode: ComponentContent<ParamsInterface> | undefined = undefined
let toastParams = new ParamsInterfaceClass(params)//一个interface转成class
contentNode = new ComponentContent(uiContext!, wrapBuilder(CustomeDialogBuilder), toastParams);
if(uiContext){
try {
//打开自定义弹窗,但是这里的参数只能是我定义好的。没办法像系统的可以直接调对应的弹窗传递param1、 param2
uiContext.getPromptAction().openCustomDialog(contentNode, {
}
})
} catch (e) {
console.error(e)
}
}
}
}
@Builder
function CustomeDialogBuilder(params?: ParamsInterface) {}
更多关于HarmonyOS鸿蒙Next中如何实现一个自定义CustomDialogControllerOptions的builder方法?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,通过CustomDialogController的构造方法传入CustomDialogControllerOptions对象,并在其中定义builder方法。示例代码:
let controller = new CustomDialogController({
builder: CustomDialogExample({}),
// 其他可选配置
});
其中CustomDialogExample为自定义弹窗组件。builder方法需返回一个@CustomDialog装饰的组件。
更多关于HarmonyOS鸿蒙Next中如何实现一个自定义CustomDialogControllerOptions的builder方法?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
要实现自定义的CustomDialogControllerOptions的builder方法,你可以通过封装一个类来管理弹窗的创建和参数传递。以下是一个示例实现:
export class CustomDialogController {
private builder: any;
private params: any;
constructor(options: { builder: any, params?: any }) {
this.builder = options.builder;
this.params = options.params;
}
openDialog(): void {
let uiContext: UIContext | undefined = AppStorage.get(LOCAL_UI_CONTEXT);
if (uiContext) {
try {
const contentNode = new ComponentContent(uiContext, wrapBuilder(this.builder), this.params);
uiContext.getPromptAction().openCustomDialog(contentNode, {});
} catch (e) {
console.error(e);
}
}
}
}
// 使用示例
const myDialogController = new CustomDialogController({
builder: CustomeInfoDialog,
params: { param1: '参数1', param2: '参数2' }
});
myDialogController.openDialog();
这种方式允许你通过构造函数传递builder和参数,并在需要时调用openDialog方法显示弹窗。参数会通过ComponentContent传递给builder函数。