HarmonyOS 鸿蒙Next 自定义组件Index使用ForEach渲染不同@Builder函数,通过builderArr声明的wrapBuilder数组体现不同@Builder函数效果,实现不同组件的通信
HarmonyOS 鸿蒙Next 自定义组件Index使用ForEach渲染不同@Builder函数,通过builderArr声明的wrapBuilder数组体现不同@Builder函数效果,实现不同组件的通信
更多关于HarmonyOS 鸿蒙Next 自定义组件Index使用ForEach渲染不同@Builder函数,通过builderArr声明的wrapBuilder数组体现不同@Builder函数效果,实现不同组件的通信的实战教程也可以访问 https://www.itying.com/category-93-b0.html
@Observed装饰器
更多关于HarmonyOS 鸿蒙Next 自定义组件Index使用ForEach渲染不同@Builder函数,通过builderArr声明的wrapBuilder数组体现不同@Builder函数效果,实现不同组件的通信的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这是我实现的方式,你可以参考一下,可能无法使用builderArr声明,因为传递参数不同,并且如果把wrapBuilder()再放在[@Builder](/user/Builder)里实现,需要加一层按引用传递
[@Builder](/user/Builder)
function MyBuilder($$: MyObject) {
Text($$.value)
.fontSize($$.size)
}
@Builder
function YourBuilder($$: YourObject ) {
Text($$.value)
.fontSize($$.size)
.fontColor(Color.Pink)
.onClick(() => {
$$.obj.value = ‘test’
$$.obj.size = 121
})
}
class YourObject {
value: string = ‘’;
size: number = 10;
obj: MyObject = new MyObject();
}
class MyObject {
value: string = ‘message’;
size: number = 20
}
@Entry
@Component
struct Index {
@State @Watch(‘myObjectChange’) obj: MyObject = new MyObject();
myObjectChange() {
console.log(‘myObjectChange’)
}
build() {
Row() {
Column() {
wrapBuilder(MyBuilder).builder({
value: this.obj.value,
size: this.obj.size
})
wrapBuilder(YourBuilder).builder({
value: ‘Hello World’,
size: 30,
obj: this.obj
})
}
.width(‘100%’)
}
.height(‘100%’)
}
}
在HarmonyOS鸿蒙Next中,自定义组件Index可以使用ForEach来渲染不同@Builder函数。通过builderArr
声明的wrapBuilder
数组,可以体现不同@Builder函数效果,实现不同组件间的通信。
具体操作步骤如下:
-
定义Builder函数:在自定义组件中定义多个@Builder函数,每个函数对应不同的组件布局或属性。
-
准备wrapBuilder数组:创建一个wrapBuilder数组,该数组包含多个Builder对象,每个对象对应不同的@Builder函数生成的组件。
-
使用ForEach渲染:在Index组件的模板中使用ForEach指令遍历wrapBuilder数组,根据数组中的Builder对象渲染对应的组件。
-
实现组件通信:通过HarmonyOS提供的事件机制或数据绑定机制,实现不同组件间的通信。例如,可以使用
@Consume
注解消费事件,或使用@Link
注解绑定数据。
示例代码(简化):
@Entry
@Component
struct Index {
@State wrapBuilders: Array<Builder> = [Builder1(), Builder2()];
build() {
ForEach(this.wrapBuilders, (item) => {
Column() {
item.build()
}
})
}
}
注意:上述代码为简化示例,实际开发中需根据具体需求调整。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html