在官方文档下,有以下描述:
CustomDialogController仅在作为@CustomDialog和@Component struct的成员变量,且在@Component struct内部定义时赋值才有效
对于面向对象的开发思想来说,我们只想用一套代码,而不用到处进行初始化定义,因此,经过长达两天半的搜索及琢磨,有以下的方式,应符合大部分的场景需求。
不多说,上封装代码:
// 封装常用的入参
export interface AppDialogOptions {
width?: Dimension
height?: Dimension
alignment?: DialogAlignment
isTip: boolean
isCheck?: boolean
message?: string | Resource
password?: (password?: string) => void // 获取自定义view返回的数据
}
// 封装的CustomDialogController
export function CreateDialog(options: AppDialogOptions): CustomDialogController {
let controller = new CustomDialogController({
width: options.width,
height: options.height,
alignment: options.alignment,
builder: QuickDialogView({
isTip: options.isTip,
tipMsg: options.message,
isCheck: options.isCheck,
cancel: (code?: string) => {
controller.close() // 需要在这里进行close,在自定义view里使用controller.close会崩溃
if (options.password) {
options.password(code)
}
}
})
})
return controller
}
以下是,使用的示例代码:
// 这里一定要使用bind进行绑定
private quickDialog: CustomDialogController = CreateDialog.bind(this)({
width: '97%',
height: '30%',
alignment: DialogAlignment.Center,
password: (code?: string) => {
console.error(`whz--->${code}`)
}
})
// 备注:若是参数什么都是确定,只需创建对象记得bind(this)后的()一定要带,否则会崩溃
private quickDialog: CustomDialogController = CreateDialog.bind(this)()
至此,封装使用,皆完成!!!