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函数内部处理,而不是在参数类型定义中。你的问题可以通过以下方式解决:
- 修改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
}
- 使用时可以只传部分参数:
SCBaseDialogBuilder({
message: "自定义内容",
onConfirm: () => {
console.log("确认");
}
)
这种方式会在未传参时自动使用默认值。注意TypeScript接口中的默认值声明不会直接影响运行时行为,需要在Builder内部显式处理。