HarmonyOS 鸿蒙Next 子组件获取父组件属性

HarmonyOS 鸿蒙Next 子组件获取父组件属性 ArkUI子组件如何获取父组件的属性呢,比如height和width,有时候UI布局是动态的,特定子组件的尺寸属性要依据父组件属性计算,这个如何实现

5 回复

直接设置margin和百分比的方式可以吧

更多关于HarmonyOS 鸿蒙Next 子组件获取父组件属性的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


理论上Component 中的 onMeasure 可以做到,但现在API提供的太少了。我没试出来

@Link 双向绑定传值吧。

我的代码是这样的

@Component
@Entry
export default struct Index {

  build() {
    Column() {
      Scroll() {
        Row({space:20}) {
          Image().width(40).borderRadius(20)
          Search().width(this.parentWidth-210)
          Image().width(30).borderRadius(15)
          Image().width(30).borderRadius(15)
          Image().width(30).borderRadius(15)
        }.width('100%').padding(20).justifyContent(FlexAlign.SpaceBetween)
        .backgroundColor(Color.White)
      }
    }.width('100%').height('100%')
  }
}

我想设置Search的宽度,但是要拿到父组件Row的宽度然后做计算,要是这个也需要绑定也太麻烦了

在HarmonyOS中,子组件可以通过@Provide@Consume装饰器来获取父组件的属性。@Provide装饰器用于在父组件中定义一个可被后代组件共享的状态变量,而@Consume装饰器用于在子组件中获取并使用该状态变量。

例如,父组件中定义了一个@Provide装饰的状态变量:

@Provide('themeColor') themeColor: string = 'blue';

子组件中可以使用@Consume装饰器来获取并使用该状态变量:

@Consume('themeColor') themeColor: string;

这样,子组件就可以直接使用themeColor属性,并且当父组件中的themeColor发生变化时,子组件中的themeColor也会自动更新。

此外,还可以使用@Observed@ObjectLink装饰器来实现父子组件之间的状态同步。@Observed用于标记一个类为可观察对象,而@ObjectLink用于在子组件中绑定父组件的可观察对象。

例如,父组件中定义了一个可观察对象:

@Observed
class Theme {
  color: string = 'blue';
}

@State theme: Theme = new Theme();

子组件中可以使用@ObjectLink装饰器来绑定父组件的可观察对象:

@ObjectLink theme: Theme;

这样,子组件中的theme属性将始终与父组件中的theme保持同步。

以上是HarmonyOS中子组件获取父组件属性的主要方法。

回到顶部