HarmonyOS 鸿蒙Next A组件用到了B组件,A给B传递了builder方法,如何在这个builder中修改B组件的属性或调用B组件的方法

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next A组件用到了B组件,A给B传递了builder方法,如何在这个builder中修改B组件的属性或调用B组件的方法

A组件用到了B组件,A给B传递了builder方法,在这个builder中,想要修改B组件的属性,或者调用B组件的方法,该如何实现?

2 回复

父调用子方法,一般定义一个controller类,在controller类中定义和子组件中类型相同的方法,在子组件中将实际封装的方法给到controller。父组件在使用时,new一个controller对象然后转入子类中,在父组件中调用controller对应的方法; 参考以下代码


@Component

struct Child {

  @BuilderParam MyButton : () => void

  @State private text: string = '初始值'

  private ChildRef: ChildController = new ChildController();

  aboutToAppear() {

    if(this.ChildRef) {

      this.ChildRef.changeText = this.changeText

    }

  }

  private changeText = (value: string) =>{

    this.text = value

  }

  build() {

    Column() {

      Text(this.text)

      this.MyButton()

    }

  }

}

@Entry

@Component

struct Parent {

  ChildRef = new ChildController()

  @Builder

  buildParams(){

    Button('Parent调用childer的changeText').onClick(() => {

      console.info("this.ChildRef:",this.ChildRef)

      this.ChildRef.changeText('Parent调用childer的changeText')

    })

  }

  build() {

    Column() {

      Text('获取Child的exposeMethods!').fontSize('18vp').fontColor(Color.Gray)

      Divider()

      Child({ ChildRef: this.ChildRef , MyButton:()=>{ this.buildParams() } })

    }

  }

}

class ChildController {

  changeText = (value: string) => {

    console.log('11111')

  }

}

更多关于HarmonyOS 鸿蒙Next A组件用到了B组件,A给B传递了builder方法,如何在这个builder中修改B组件的属性或调用B组件的方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,若A组件向B组件传递了一个builder方法,并希望在builder中修改B组件的属性或调用B组件的方法,可以通过以下方式实现:

  1. Builder方法设计

    • 确保B组件的builder方法设计允许外部传入参数或回调函数,以修改其属性或调用其方法。
    • 可以在builder方法中定义相应的setter接口或传入一个委托(delegate),用于在builder构建过程中应用外部逻辑。
  2. 在A组件中调用Builder

    • A组件在调用B组件的builder方法时,传入一个lambda表达式或匿名类,实现所需的修改逻辑或方法调用。
    • 例如,若B组件的builder有一个setProperty方法,A组件可以在传递builder时调用此方法修改B组件的属性。
  3. B组件应用修改

    • B组件的builder在构建最终对象时,应用这些修改或调用。

示例代码片段(简化):

// 假设B组件的builder类为BBuilder
BBuilder builder = new BBuilder();
builder.setProperty(value); // A组件修改B组件的属性
BComponent bComponent = builder.build(); // 构建B组件

注意:上述示例为简化描述,实际代码中需根据B组件builder的具体API实现。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部