CustomDialogController封装小技巧

在官方文档下,有以下描述:

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)()

至此,封装使用,皆完成!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容