HarmonyOS 鸿蒙Next组件间的通信和方法调用
HarmonyOS 鸿蒙Next组件间的通信和方法调用
一个页面中多个组件通信和方法调用,有没有更简单的方式
2 回复
组件间变量传递可以参考链接中@Prop装饰器和@Link装饰器使用方法,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-component-state-management-V5
子组件调用父组件的方法可参考@BuilderParam装饰器:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builderparam-V5
父组件调用子组件方法,请参考如下demo,谢谢
[@Component](/user/Component)
struct Child {
[@State](/user/State) private text: string = '初始值'
private controller: ChildController = new ChildController();
aboutToAppear() {
if(this.controller) {
this.controller.changeText = this.changeText
}
console.log('aaa')
}
private changeText = (value: string) =>{
this.text = value
console.log('bbb')
}
build() {
Column() {
Text(this.text)
}
}
}
class ChildController {
changeText = (value: string) => {
console.log('11111')
}
}
export let ChildRef = new ChildController()
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Parent {
// ChildRef = new ChildController()
[@State](/user/State) noShow: boolean = false
build() {
Column() {
Text('获取Child的exposeMethods!').fontSize('18vp').fontColor(Color.Gray)
Divider()
Child({ controller: ChildRef })
Child()
Button('Parent调用childer的changeText').onClick(() => {
ChildRef.changeText('Parent调用childer的changeText')
})
}
}
}
HarmonyOS鸿蒙Next组件间的通信和方法调用主要通过以下几种方式实现:
-
父子组件通信
- 父传子:使用
@Prop
装饰器,子组件定义@Prop
变量,父组件通过对象形式传入数据,这种方式是单向传递。 - 子传父:虽然
@Prop
不支持子传父,但可以通过@Link
装饰器实现双向绑定,子组件变量值改变时,父组件数据也会相应变化。
- 父传子:使用
-
兄弟组件及不相关组件通信
- 可以借助父组件作为中转,或者使用全局状态管理(如通过服务或全局变量)来实现。
-
方法调用
- 组件间的方法调用一般通过事件机制实现,如子组件触发事件,父组件监听并处理该事件,进而调用相关方法。
-
高级通信方式
- @Provide/@Consume:用于后代组件间的通信,提供方组件使用
[@Provide](/user/Provide)
装饰器暴露数据或方法,消费方组件使用[@Consume](/user/Consume)
装饰器接收。 - @Observed/@ObjectLink:用于嵌套对象数组属性变化的监听和通信。
- @Provide/@Consume:用于后代组件间的通信,提供方组件使用
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。