HarmonyOS 鸿蒙Next 父组件如何调用子组件方法
HarmonyOS 鸿蒙Next 父组件如何调用子组件方法
目前有一个场景,我子组件封装了一个函数,需要在父组件触发某个动作之后,去主动调用子组件里面定义的函数,请问要怎么处理
3 回复
可以定义一个controller类,在controller类中定义和子组件中类型相同的方法,在子组件中将实际封装的方法给到controller。父组件在使用时,new一个controller对象然后转入子类中,在父组件中调用controller对应的方法即可。参考代码:
[@Component](/user/Component)
struct Child {
[@State](/user/State) private text: string = '初始值'
private controller: ChildController = new ChildController();
aboutToAppear() {
if(this.controller) {
//给controller对应的方法赋值
this.controller.changeText = this.changeText
}
}
//封装的能力
private changeText = (value: string) =>{
this.text = value
}
build() {
Column() {
Text(this.text)
}
}
}
//定义controller对象
class ChildController {
changeText = (value: string) => {}
}
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Parent {
private ChildRef = new ChildController()
build() {
Column() {
Text('调用Child的changeText').fontSize('18vp').fontColor(Color.Gray)
Divider()
Child({ controller:this. ChildRef })
Button('Parent调用childer的changeText').onClick(() => {
this.ChildRef.changeText('Parent调用childer的changeText')
})
}
.justifyContent(FlexAlign.Center)
.width("100%")
.height("100%")
}
}
父子组件必须在同一文件内才能生效吗