HarmonyOS 鸿蒙Next 子组件被父组件包装后,如何通过父组件设置子组件的属性
HarmonyOS 鸿蒙Next 子组件被父组件包装后,如何通过父组件设置子组件的属性
如果是想对系统组件进行封装,可以参考: 组件封装开发实践-UI框架-应用框架开发-功能开发-最佳实践 - 华为HarmonyOS开发者
该文档中详细介绍了如何对ArkUI组件进行自定义封装,不过目前ArkUI并不支持自定义组件链式调用,我们提供以下样例作为链式调用的替代方案,样例代码如下:
Index.ets:
import CustomSysComp, { MyTextInputModifier } from './CustomSysComp'
@Entry
@Component
struct Index {
@Styles pressedStyles() {
.backgroundColor(Color.Blue)
}
build() {
Column() {
CustomSysComp({
textInputModifier: new MyTextInputModifier()
.backgroundColor(Color.Blue)
.placeholderColor(Color.Red)
})
.width("100%")
.height(400)
}
.width('100%')
.width('100%')
}
}
CustomSysComp.ets:
@Component
struct CustomSysComp {
// 设置自定义TextInput
textInputModifier: MyTextInputModifier = new MyTextInputModifier()
build() {
Column() {
TextInput({placeholder: "placeholder"})
.attributeModifier(this.textInputModifier)
Button("button")
}
.width("100%")
.height("100%")
}
}
// 提供方创建自定类Class类,实现系统AttributeModifier接口
export class MyTextInputModifier implements AttributeModifier<TextInputAttribute> {
// 默认属性
private mWidth: Length = '100%'
private mHeight: Length = 100
// 定制属性
private mPlaceholderColor: ResourceColor = Color.Gray
placeholderColor(placeholderColor: ResourceColor): MyTextInputModifier {
this.mPlaceholderColor = placeholderColor
return this
}
private mBackgroundColor: ResourceColor = Color.Orange
backgroundColor(backgroundColor: ResourceColor): MyTextInputModifier {
this.mBackgroundColor = backgroundColor
return this
}
applyNormalAttribute(instance: TextInputAttribute): void {
instance.width(this.mWidth)
instance.height(this.mHeight)
instance.placeholderColor(this.mPlaceholderColor)
instance.backgroundColor(this.mBackgroundColor)
}
}
export default CustomSysComp
更多关于HarmonyOS 鸿蒙Next 子组件被父组件包装后,如何通过父组件设置子组件的属性的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你想的这种简便的,现在看来应该是没有的。
如果只是链式调用,那直接定义 class 然后用Java Builder 构建一下方法。应该也可以
在HarmonyOS鸿蒙系统中,当子组件被父组件包装后,可以通过父组件的自定义属性和方法间接设置子组件的属性。具体实现步骤如下:
-
定义父组件与子组件: 确保父组件和子组件的XML布局文件已经定义,并且子组件在父组件中正确引用。
-
使用@BindElement: 在父组件的JavaScript代码中,使用
[@BindElement](/user/BindElement)
注解绑定子组件的引用。 -
设置子组件属性: 通过父组件的JavaScript代码,使用绑定到子组件的引用直接设置子组件的属性。例如,如果子组件有一个名为
myProperty
的属性,可以通过this.$refs.childComponent.myProperty = newValue;
进行设置。 -
同步更新: 确保在父组件中设置子组件属性后,UI能够同步更新。这通常依赖于鸿蒙系统的数据绑定机制。
-
注意事项: 确保子组件的属性是公开的,即子组件的JavaScript代码中应有相应的属性定义和getter/setter方法(如果适用)。
示例代码(伪代码):
// 父组件JavaScript代码
@Entry
@Component
struct ParentComponent {
[@BindElement](/user/BindElement)(childComponent) childRef: any;
build() {
Column() {
ChildComponent(this.$refs.childRef)
}
}
setProperty() {
this.$refs.childRef.myProperty = 'newValue';
}
}
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html