• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 动态属性设置
2
3动态设置组件的属性,支持开发者在属性设置时使用if/else语法,且根据需要使用多态样式设置属性。
4
5>  **说明:**
6>
7>  从API Version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9## attributeModifier
10
11attributeModifier(modifier:&nbsp;AttributeModifier\<T>)
12
13动态设置组件的属性方法。
14
15**系统能力:** SystemCapability.ArkUI.ArkUI.Full
16
17**参数:**
18
19| 参数名   | 类型                  | 必填 | 说明                                                         |
20| -------- | --------------------- | ---- | ------------------------------------------------------------ |
21| modifier | AttributeModifier\<T> | 是   | 在当前组件上,动态设置属性方法,支持使用if/else语法。<br/>modifier: 属性修改器,开发者需要自定义class实现AttributeModifier接口。 |
22
23## AttributeModifier\<T>
24
25开发者需要自定义class实现AttributeModifier接口。
26
27### applyNormalAttribute
28applyNormalAttribute(instance: T) : void
29
30组件普通状态时的样式。
31
32### applyPressedAttribute
33applyPressedAttribute(instance: T) : void
34
35组件按压状态的样式。
36
37### applyFocusedAttribute
38applyFocusedAttribute(instance: T) : void
39
40组件获焦状态的样式。
41
42### applyDisabledAttribute
43applyDisabledAttribute(instance: T) : void
44
45组件禁用状态的样式。
46
47### applySelectedAttribute
48applySelectedAttribute(instance: T) : void
49
50组件选中状态的样式
51
52开发者可根据需要自定义实现这些方法,通过传入的参数识别组件类型,对instance设置属性,支持使用if/else语法进行动态设置。
53
54**参数**:
55
56| 参数             | 描述                                                         |
57| -------------------- | ------------------------------------------------------------ |
58| instance |组件的属性类,用来标识进行属性设置的组件的类型,比如Button组件的ButtonAttribute,Text组件的TextAttribute等。|
59
60**instance参数支持范围:**
61
62AlphabetIndexerAttribute、BadgeAttribute、BlankAttribute、ButtonAttribute、CalendarPickerAttribute、CanvasAttribute、CheckboxAttribute、CheckboxGroupAttribute、CircleAttribute、ColumnAttribute、ColumnSplitAttribute、ShapeAttribute、CommonAttribute、CounterAttribute、DataPanelAttribute、DatePickerAttribute、DividerAttribute、EffectComponentAttribute、EllipseAttribute、FlexAttribute、FlowItemAttribute、FormComponentAttribute、FormLinkAttribute、GaugeAttribute、GridAttribute、GridColAttribute、ColumnAttribute、GridItemAttribute、GridRowAttribute、HyperlinkAttribute、ImageAttribute、ImageAnimatorAttribute、ImageSpanAttribute、LineAttribute、ListAttribute、ListItemAttribute、ListItemGroupAttribute、LoadingProgressAttribute、MarqueeAttribute、MenuAttribute、MenuItemAttribute、MenuItemGroupAttribute、NavDestinationAttribute、NavigationAttribute、NavigatorAttribute、NavRouterAttribute、PanelAttribute、PathAttribute、PatternLockAttribute、PluginComponentAttribute、PolygonAttribute、PolylineAttribute、ProgressAttribute、QRCodeAttribute、RadioAttribute、RatingAttribute、RectAttribute、RefreshAttribute、RelativeContainerAttribute、RemoteWindowAttribute、RichEditorAttribute、RichTextAttribute、RowAttribute、RowSplitAttribute、ScrollAttribute、ScrollBarAttribute、SearchAttribute、SelectAttribute、ShapeAttribute、SideBarContainerAttribute、SliderAttribute、SpanAttribute、StackAttribute、StepperAttribute、StepperItemAttribute、SwiperAttribute、TabContentAttribute、TabsAttribute、TextAttribute、TextAreaAttribute、TextClockAttribute、TextInputAttribute、TextPickerAttribute、TextTimerAttribute、TimePickerAttribute、ToggleAttribute、UIExtensionComponentAttribute、VideoAttribute、WaterFlowAttribute、WebAttribute、XComponentAttribute
63
64**属性支持范围:**
65
66不支持入参为[CustomBuilder](ts-types.md#custombuilder8)或Lamda表达式的属性,且不支持事件和手势。
67
68## 示例
69
70```ts
71// xxx.ets
72class MyButtonModifier implements AttributeModifier<ButtonAttribute> {
73  isDark: boolean = false
74  applyNormalAttribute(instance: ButtonAttribute): void {
75    if (this.isDark) {
76      instance.backgroundColor(Color.Black)
77    } else {
78      instance.backgroundColor(Color.Red)
79    }
80  }
81}
82
83@Entry
84@Component
85struct attributeDemo {
86  @State modifier: MyButtonModifier = new MyButtonModifier()
87
88  build() {
89    Row() {
90      Column() {
91        Button("Button")
92          .attributeModifier(this.modifier)
93          .onClick(() => {
94            this.modifier.isDark = !this.modifier.isDark
95          })
96      }
97      .width('100%')
98    }
99    .height('100%')
100  }
101}
102```
103![attributeModifier_ifelse](figures/attributeModifier_ifelse.gif)
104
105
106
107```ts
108// xxx.ets
109class MyButtonModifier implements AttributeModifier<ButtonAttribute> {
110  applyNormalAttribute(instance: ButtonAttribute): void {
111    instance.backgroundColor(Color.Black)
112  }
113
114  applyPressedAttribute(instance: ButtonAttribute): void {
115    instance.backgroundColor(Color.Red)
116  }
117}
118
119@Entry
120@Component
121struct attributePressedDemo {
122  @State modifier: MyButtonModifier = new MyButtonModifier()
123
124  build() {
125    Row() {
126      Column() {
127        Button("Button")
128          .attributeModifier(this.modifier)
129      }
130      .width('100%')
131    }
132    .height('100%')
133  }
134}
135```
136![attributeModifier_ifelse](figures/attributeModifier_ifelse.gif)