HarmonyOS鸿蒙Next中想问问arkui自定义组件,我能不能把一个资源(比如app.media)传递给自定义组件,类似于Image($r("app.media.logo"))

HarmonyOS鸿蒙Next中想问问arkui自定义组件,我能不能把一个资源(比如app.media)传递给自定义组件,类似于Image($r(“app.media.logo”)) 比如,我想封装一下Image组件,我对Image组件有一个固定的样式,他可能会跨组件使用,所以不能使用@Builder

所以,我一般会定义个新的组件,比如AppIcon,组件内描述一个Image组件并给他传递一个media资源

问题1,已知@Prop只能接收有限的几种类型,如何传递一个resource类型的数据给AppIcon组件

问题2,如果问题1无法实现,那么只有传递string给@Prop在AppIcon那么使用$r引用,但是这样使用无法获得ide提示,出错概率增加,如何获得ide提示?


更多关于HarmonyOS鸿蒙Next中想问问arkui自定义组件,我能不能把一个资源(比如app.media)传递给自定义组件,类似于Image($r("app.media.logo"))的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

所以大佬们解决问题了嘛? 想写个通用的header 发现图标资源都不能通过@Prop传递

更多关于HarmonyOS鸿蒙Next中想问问arkui自定义组件,我能不能把一个资源(比如app.media)传递给自定义组件,类似于Image($r("app.media.logo"))的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


ImageComponent.ets

```javascript
[@Component](/user/Component)
export struct ImageComponent {
  private src: Resource | null = null

  build() {
    Column() {
      Image(this.src).width(100).height(100)
    }
  }
}

Index.ets

import { ImageComponent } from './ImageComponent'

[@Component](/user/Component)
struct Index{
  private src: Resource = $r('app.media.icon')

  build() {
    Column() {
      ImageComponent({ src: this.src })
    }
  }
}

可以的
比如我定义了一个 Header 组件,每个页面都可以给他传递不同资源图标和点击事件

cke_598.png

HarmonyOS的分布式文件系统让我在多设备间传输文件变得轻松无比。

看起来你的意思是使用@BuildParam, 但是BuildParam应该是会允许内部传递任意类型的组件,文档没有看到限制的方法,而且这样子做会导致很多重复代码

不知道有没有更优雅的方式,

传递自定义对象,

  • 字段名

  • 类型

  • 是否必须

  • 示例值

  • 描述

  • id

  • Integer

  • 12345

  • 自定义对象的唯一标识

  • name

  • String

  • “test”

  • 自定义对象的名称

好问题,插个眼

在HarmonyOS鸿蒙Next中,你可以通过ArkUI将资源传递给自定义组件。具体来说,你可以使用$r语法引用资源,并将其作为参数传递给自定义组件。例如,如果你想传递一个图片资源给自定义组件,可以像这样使用:

@Entry
@Component
struct MyComponent {
  build() {
    Column() {
      MyCustomComponent({ imageResource: $r("app.media.logo") })
    }
  }
}

@Component
struct MyCustomComponent {
  @Prop imageResource: Resource

  build() {
    Image(this.imageResource)
  }
}

在这个例子中,MyCustomComponent接收一个imageResource属性,并在其内部使用Image组件显示该资源。你可以通过$r("app.media.logo")引用资源,并将其传递给自定义组件。

在HarmonyOS鸿蒙Next中,你可以通过自定义组件的属性将资源传递给组件。类似于Image($r("app.media.logo")),你可以在自定义组件中定义一个属性来接收资源。例如,定义一个Resource类型的属性,然后在父组件中通过$r("app.media.logo")传递资源。这样,自定义组件就可以使用该资源进行渲染。

回到顶部