当前位置:   article > 正文

【HarmonyOS】ArkTS自定义组件如何调用通用属性?_arkts 自定义组件中怎么调用方法

arkts 自定义组件中怎么调用方法

【关键词】

ArkTS、通用属性、 @BuilderParam

【问题背景】

有个开发者使用ArkTS自定义了一个子组件AnimationButton,里面用到了装饰器 @BuilderParam,在父页面中引用的时候使用自定义组件时,使用以下方式调用:

cke_414.png

就报了这个错

cke_950.png

【问题分析】

开发者的想法是:既然是组件,就应该可以使用通用属性,甚至可以让自定义属于这个组件的属性,比如说增加自定义组件的点方法,可以CustomComponent().customProp(true)。但是当前自定义组件使用{}传递BuilderParam后,要自定义构建函数(@Builder装饰的方法)进行初始化,且不再支持调用通用属性,之前未识别到这个场景,开发人员说后续会修复;而自定义组件调用自身的方法,框架目前是不支持的。

【解决方案】
当前自定义组件使用{}传递BuilderParam后,不再支持调用通用属性,但是可以通过自定义构建函数(@Builder装饰的方法)初始化来实现,具体代码如下:
子组件

  1. enum SpringEffect {
  2. small = 0.95,
  3. medium = 0.9,
  4. large = 0.8
  5. }
  6. @Component
  7. struct AnimationButton {
  8. @State effect: SpringEffect = SpringEffect.medium
  9. @BuilderParam closer: () => void;
  10. @State sizeScale: number = 1;
  11. build() {
  12. Column() {
  13. this.closer()
  14. }
  15. .scale({
  16. x: this.sizeScale,
  17. y: this.sizeScale
  18. })
  19. .animation({
  20. duration: 300,
  21. curve: Curve.Friction
  22. })
  23. .onTouch(event => {
  24. if (event.type === TouchType.Down) {
  25. this.sizeScale = this.effect
  26. } else if (event.type === TouchType.Up) {
  27. this.sizeScale = 1
  28. }
  29. })
  30. }
  31. }
  32. export { AnimationButton, SpringEffect }

父页面

  1. import { AnimationButton } from './Page1'
  2. @Builder function specificParam(label: string = '未选择') {
  3. Column() {
  4. Text(label)
  5. .fontSize(24)
  6. .fontColor(Color.White)
  7. .textAlign(TextAlign.Center)
  8. .padding({top: 8, bottom: 8})
  9. .width('100%')
  10. .borderRadius(30)
  11. .backgroundColor(0x0066ff)
  12. .opacity(0.7)
  13. }
  14. }
  15. @Entry
  16. @Component
  17. struct HbuildParam {
  18. build() {
  19. Column() {
  20. // 用父组件自定义构建函数初始化子组件@BuildParam装饰的方法。
  21. AnimationButton({closer: specificParam})
  22. }
  23. }
  24. }

示例效果如下:

cke_4464.png

【相关参考】

@BuilderParam装饰器:引用@Builder函数: ​zh-cn/application-dev/quick-start/arkts-builderparam.md · OpenHarmony/docs - Gitee.com

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/327645
推荐阅读
相关标签
  

闽ICP备14008679号