您现在的位置是:首页 > 编程 > 

HarmonyOS EXT父组件如何调用子组件的方法

2025-07-27 21:32:44
HarmonyOS EXT父组件如何调用子组件的方法 问题描述:HarmonyOS EXT父组件如何调用子组件的方法应用场景:父组件中有一个收藏话题列表,在父组件击取消收藏后,对应的子组件中的收藏状态也需要同步更新,这里就涉及到:父组件中需要触发子组件的方法解决方案一:可以定义一个controller类,在controller类中定义和子组件中类型相同的方法,在子组件中将实际封装的方法给到co

HarmonyOS EXT父组件如何调用子组件的方法

问题描述:HarmonyOS EXT父组件如何调用子组件的方法应用场景:

父组件中有一个收藏话题列表,在父组件击取消收藏后,对应的子组件中的

收藏状态也需要同步更新,这里就涉及到:父组件中需要触发子组件的方法

解决方案一:

可以定义一个controller类,在controller类中定义和子组件中类型相同的方法,在子组件中将实际封装的方法给到controller。父组件在使用时,new一个controller对象然后传入子组件,在父组件中调用controller对应的方法即可。

参考代码:

代码语言:js复制
@Component
struct Child {
  @State private text: string = '初始值';
  private controller: ChildController = new ChildController();

  aboutToAppear() {
    if () {
      // 给controller对应的方法赋值
      .changeText = ;
    }
  }

  private changeText = (value: string) => {
     = value;
  }

  build() {
    Column() {
      Text()
    }
  }
}

// 定义controller对象
class ChildController {
  changeText = (value: string) => {
  }
}

@Entry
@Component
struct Parent {
  private ChildRef = new ChildController();

  build() {
    Column() {
      Text('调用Child的changeText')
        .fontSize('18vp')
        .fontColor(Color.Gray)
      Divider()
      Child({ controller: this.ChildRef }) // 将new之后的controller对象传入子组件
      Button('Parent调用child的changeText')
        .onClick(() => {
          this.('Parent调用child的changeText');
        })
    }
    .justifyContent(FlexAlign.Center)
    .width('100%')
    .height('100%')
  }
}
解决方法二

使用Emitter进行【线程间通信】:在父组件发送事件,子组件或其他组件里面监听事件和数据变化,来触发子组件里面的其他方法,这样也能实现父组件调用子组件;反之也能实现子组件触发父组件的方法

好处:可以跨组件, 注意:需要在公共文件里面订阅好 不同Emitter事件的不同eventId 标识,避免互相干扰

发布事件

代码语言:js复制
import { emitter } from '@kit.BasicServicesKit';


// 定义一个eventId为1的发送事件,事件优先级为Low
let event: emitter.InnerEvent = {
  eventId: 1,
  priority: emitter.EventPriority.LOW
};

let eventData: emitter.EventData = {
  data: {
    content: 'c',
    id: 1,
    isEmpty: false
  }
};

// 发送eventId为1的事件,事件内容为eventData
(event, eventData);

订阅事件

代码语言:js复制
import { emitter } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';

ct TAG: string = 'ThreadModel';
ct DOMAI_UMBER: number = 0xFF00;

// 定义一个eventId为1的接收事件
let event: emitter.InnerEvent = {
  eventId: 1
};

// 收到eventId为1的事件后执行该回调,这里就是编写其他函数
let callback = (eventData: emitter.EventData): void => {
  promptAction.showToast({
    message: JSO.stringify(eventData)
  });
  hilog.info(DOMAI_UMBER, TAG, 'event callback:' + JSO.stringify(eventData));
};

// 订阅eventId为1的事件,接收到数据后,立刻触发回调函数
(event, callback);
promptAction.showToast({
  message: JSO.stringify('emitter subscribe success')
});

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1218183.html

相关标签:无
上传时间: 2025-07-25 10:19:09
留言与评论(共有 8 条评论)
本站网友 深圳证券交易所融资融券交易实施细则
11分钟前 发表
string = 'ThreadModel'; ct DOMAI_UMBER
本站网友 人工少女4
22分钟前 发表
对应的子组件中的收藏状态也需要同步更新
本站网友 耒阳房产网
8分钟前 发表
emitter.EventData)
本站网友 拉尔夫费因斯
18分钟前 发表
接收到数据后
本站网友 燕郊纳丹堡房价
9分钟前 发表
ChildController = new ChildController(); aboutToAppear() { if () { // 给controller对应的方法赋值 .changeText = ; } } private changeText = (value
本站网友 日语我爱你怎么写
25分钟前 发表
emitter.EventPriority.LOW }; let eventData
本站网友 蔡依林丰胸前后
24分钟前 发表
在父组件击取消收藏后