鸿蒙开发之组件间方法传递(方法回调)

目前使用的方式有两种,一种是父子组件方法传递,一种是系统提供的emitter。

一、父子组件方法传递

1.1 使用场景

当我们父组件中有一个方法,需要子组件在修改完数据后回调父组件的方法时候。有点抽象:这样解释一下,父组件A中创建了子组件B,A中一个方法是需要B端更新数据后调用来刷新页面。这样我们就需要将A中的方法传递给子组件B。然后,B端改完数据后调用这个方法。

1.2 伪代码实现
//父组件A中的伪代码

//A组件中的方法实现
  startCalcuteMoney() {
    //。。。。这里进行方法处理
   
  }

build() {
      Column() {
        
          ListItem() {
            TopCellItem({startCalcute:this.startCalcuteMoney.bind(this)})
          }
    }
}


//=========================================//

//子组件B中的伪代码

@Component
struct TopCellItem {

 //接受父类传递的方法
  startCalcute:() => void

build() {
    Column(){
          Text('点击调用父组件方法')
            .fontSize(20)
            .onClick(() => {
              this.startCalcute()
            })
        }
}

比较好理解,不过需要注意的是父组件在传递给子组件方法的时候需要bind(this)。

当B组件TopCellItem点击Text的时候就可以回调父组件的方法了。

二、emitter

可以先看一下官方文档,解释的比较清晰。

2.1 使用场景

这个对于原生iOS开发来说就像notification通知,或者swift的EventBus。可以实现跨页面,跨组件的一对多的传递。例如主题设置,我在设置完主题颜色的时候,需要所有监听到的地方发生更改。这就需要用到emitter了。

2.2 伪代码实现
//发送信号的方法
  saveportfoilRate() {
   
        //发送信号
        let eventData = {
          data: { //发送的数据
            "rate": this.portfolioRate,
          }};
        let innerEvent = {
          eventId: 11, //发送的ID,需要跟监听方一致
          priority: emitter.EventPriority.HIGH
        };
        emitter.emit(innerEvent, eventData);
  }

//=====================================================

//监听信号的地方

 listenRateChange() {
    let innerEvent = {
      eventId: 11 //监听的ID,需要跟发送方一致
    };
    function EmitterCallback(eventData) {
      //处理收到的数据

    }
    emitter.on(innerEvent, EmitterCallback.bind(this));

  }

同样需要注意的是,在监听信号的地方需要bind(this)。

当组件A中调用发送信号的地方时候,组件B在监听的地方就可以收到了。需要注意的是需要先监听再发送。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值