HarmonyOS鸿蒙Next中@Builder如何给参数设置默认值?

HarmonyOS鸿蒙Next中@Builder如何给参数设置默认值?

export class SCDialogOption {
  title?: string="标题"  // 弹窗标题
  message?: string // 弹窗内容
  showCancel?: boolean = true //是否显示取消按钮
  cancelText?: string // 取消按钮的文案
  confirmText?: string // 确认按钮的文案
  onCancel?: () => void = () => {
  }
  onConfirm?: () => void = () => {
  }
}

[@Builder](/user/Builder)
export function SCBaseDialogBuilder(param:SCDialogOption){}

这是我简易封装的dialog弹窗,我希望用的时候,不传这些属性,比如 title、showCancel等,有自己的默认值。但是貌似不管用,是我用的方式不对,还是不支持设置默认值


更多关于HarmonyOS鸿蒙Next中@Builder如何给参数设置默认值?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

JS函数参数给默认值,可以参考下面:

class SCDialogOption {
  title?: string = "标题" // 弹窗标题
  message?: string // 弹窗内容
  showCancel?: boolean = true //是否显示取消按钮
  cancelText?: string // 取消按钮的文案
  confirmText?: string // 确认按钮的文案
  onCancel?: () => void = () => {
  }
  onConfirm?: () => void = () => {
  }
}

@Builder
function SCBaseDialogBuilder(param = new SCDialogOption()) {
  Text(param?.title)
    .fontColor(Color.Red)
}

如果既要一部分属性有默认值,一部分需要传的话,可以在ui中加上默认值

class SCDialogOption {
  title?: string = "标题" // 弹窗标题
  message?: string // 弹窗内容
  showCancel?: boolean = true //是否显示取消按钮
  cancelText?: string // 取消按钮的文案
  confirmText?: string // 确认按钮的文案
  onCancel?: () => void = () => {
  }
  onConfirm?: () => void = () => {
  }
}

@Builder
function SCBaseDialogBuilder(param?: SCDialogOption) {
  Text(param?.title || '标题')
    .fontColor(Color.Red)
}

更多关于HarmonyOS鸿蒙Next中@Builder如何给参数设置默认值?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


只能在UI中判断吗?

类实例化后就会有默认值了,把它当实参传进去也行

class SCDialogOption {
  title?: string = "标题" // 弹窗标题
  message?: string // 弹窗内容
  showCancel?: boolean = true //是否显示取消按钮
  cancelText?: string // 取消按钮的文案
  confirmText?: string // 确认按钮的文案
  onCancel?: () => void = () => {
  }
  onConfirm?: () => void = () => {
  }
}

@Builder
function SCBaseDialogBuilder(param: SCDialogOption) {
}

@Component
struct Demo {
  private mSCDialogOption = new SCDialogOption()

  build() {
    SCBaseDialogBuilder(this.mSCDialogOption)
  }
}

在HarmonyOS鸿蒙Next中,使用@Builder给参数设置默认值可通过在参数声明时直接赋值实现。示例代码如下:

[@Builder](/user/Builder)
function myBuilder(param1: string = "default1", param2: number = 100) {
  // Builder内容
}

调用时可省略有默认值的参数:

myBuilder() // 使用默认值"default1"和100
myBuilder("custom") // 使用"custom"和默认值100

参数默认值仅支持基础类型和字面量,不支持动态表达式或函数调用。

在HarmonyOS Next中,@Builder参数设置默认值的正确方式是在Builder函数内部处理,而不是在参数类型定义中。你的问题可以通过以下方式解决:

  1. 修改Builder函数实现,在内部处理默认值:
[@Builder](/user/Builder)
export function SCBaseDialogBuilder(param: SCDialogOption) {
  // 设置默认值
  const options: SCDialogOption = {
    title: param.title ?? "标题",
    message: param.message ?? "",
    showCancel: param.showCancel ?? true,
    cancelText: param.cancelText ?? "取消",
    confirmText: param.confirmText ?? "确定",
    onCancel: param.onCancel ?? (() => {}),
    onConfirm: param.onConfirm ?? (() => {})
  };
  
  // 使用options构建UI
}
  1. 使用时可以只传部分参数:
SCBaseDialogBuilder({
  message: "自定义内容",
  onConfirm: () => {
    console.log("确认");
  }
)

这种方式会在未传参时自动使用默认值。注意TypeScript接口中的默认值声明不会直接影响运行时行为,需要在Builder内部显式处理。

回到顶部