HarmonyOS 鸿蒙Next WrappedBuilder封装的组件如何传参
HarmonyOS 鸿蒙Next WrappedBuilder封装的组件如何传参
在页面中导入这个工厂类,该如何给组件传参
@Builder
function rowContent(rowIcon: Resource, name: string, nextIcon: Resource, fontSize: number) {
Image(rowIcon)
.width(‘100%’)
.height(45)
.padding({ top: 5, bottom:5 })
Row() {
Text(name)
.fontSize(fontSize)
Image(nextIcon).height(20)
}
.layoutWeight(1)
.justifyContent(FlexAlign.SpaceBetween)
}
let factoryMap: Map<string, object> = new Map();
// 将需要工厂化的组件存入到组件工厂中
factoryMap.set(‘rowContent’, wrapBuilder(rowContent));
// 导出组件工厂
export { factoryMap };
3 回复
WrappedBuilder对象也是一个模板类,模板参数Args extends Object[]是需要包装的builder函数的参数列表。
// 使用方法
let myRowContent: WrappedBuilder<[Resource, string, Resource, number]> = factoryMap.get('rowContent') as WrappedBuilder<[]>;
我试试
在HarmonyOS鸿蒙Next中,WrappedBuilder封装的组件传参主要依赖于@Builder注解及wrapBuilder函数。以下是对传参方式的详细解析:
首先,需定义一个@Builder函数,该函数接受所需参数,并构建UI元素。例如:
[@Builder](/user/Builder) function MyBuilder(value: string, size: number) {
Text(value).fontSize(size);
}
接着,使用wrapBuilder函数封装该@Builder函数,得到一个WrappedBuilder对象。该对象可在struct组件内部通过其builder属性方法传参并渲染UI。例如:
const globalBuilder: WrappedBuilder<[string, number]> = wrapBuilder(MyBuilder);
@Entry @Component struct Index {
@State message: string = 'Hello World';
build() {
Row() {
Column() {
globalBuilder.builder(this.message, 50);
}
.width('100%')
.height('100%');
}
}
}
如果需要在struct内部使用多个不同的@Builder函数,可将它们封装成WrappedBuilder数组,并通过ForEach进行遍历渲染。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。