ArkTS中的装饰器

314 阅读1分钟

@Entry

@Entry装饰的@Component为页面的总入口,一个页面有且仅有一个@Entry 使用@Entry要在src/main/resources/base/profile/main_pages.json 注册

api9

{
  "src": [
    "pages/LoginPage",
    "pages/MainPage"
  ]
}

@Component

组件UI都是通过@Component声明来修饰,如下

  • 所有的UI都是由组件构成,组件的数据结构为struct
  • @Component装饰struct,使之成为自定义组件,
  • 自定义组件可以调用其他自定义组件和内置组件
  • 自定义组件内部必须实现build方法来描述UI结构
  • 禁止自定义构造函数

@Preview

单组件预览,无视@Entry装饰器,仅预览被@Preview装饰的自定义组件, 我们可以用@Preview来预览效果

@Builder

  • @Builder装饰器定义了一个如何渲染自定义组件的方法,语法和作用和build函数一致。

@Extend

  • 对内置组件进行二次封装
  • 提高复用性
/**
 * 文本样式扩展
 */
@Extend(Text)
function blueTextStyle() {
  .fontColor($r('app.color.login_blue_text_color'))//字体颜色
  .fontSize($r('app.float.small_text_size'))//字体大小
  .fontWeight(FontWeight.Medium)//字体粗细 中等
}
Text($r('app.string.message_login')).blueTextStyle()

**@Styles **

  • @Styles装饰的方法不能带参数
  • 组件内@Styles装饰的方法可以有多个
@Styles size_1(){ .width(100) .height(100) }
Text($r('app.string.message_login')).size_1()

@CustomDialog

  • 自定义弹窗

@BuilderParam

在创建了自定义组件,并想对该组件添加特定功能时,若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能。@BuilderParam用来装饰指向@Builder方法的变量,可在初始化自定义组件时对此属性进行赋值,为自定义组件增加特定的功能。该装饰器用于声明任意UI描述的一个元素。