赞
踩
目录
框架优先找当前组件内的@Styles,如果找不到,则会全局查找。
- // 定义在全局的@Styles封装的样式
- @Styles function globalFancy () {
- .width(150)
- .height(100)
- .backgroundColor(Color.Pink)
- }
-
- @Entry
- @Component
- struct FancyUse {
- @State heightValue: number = 100
- // 定义在组件内的@Styles封装的样式
- @Styles fancy() {
- .width(200)
- .height(this.heightValue)
- .backgroundColor(Color.Yellow)
- .onClick(() => {
- this.heightValue = 200
- })
- }
-
- build() {
- Column({ space: 10 }) {
- // 使用全局的@Styles封装的样式
- Text('FancyA')
- .globalFancy ()
- .fontSize(30)
- // 使用组件内的@Styles封装的样式
- Text('FancyB')
- .fancy()
- .fontSize(30)
- }
- }
- }
//原代码
- //原代码
- @Entry
- @Component
- struct FancyUse {
- @State label: string = 'Hello World'
-
- build() {
- Row({ space: 10 }) {
- Text(`${this.label}`)
- .fontStyle(FontStyle.Italic)
- .fontWeight(100)
- .backgroundColor(Color.Blue)
- Text(`${this.label}`)
- .fontStyle(FontStyle.Italic)
- .fontWeight(200)
- .backgroundColor(Color.Pink)
- Text(`${this.label}`)
- .fontStyle(FontStyle.Italic)
- .fontWeight(300)
- .backgroundColor(Color.Orange)
- }.margin('20%')
- }
- }
//修改后
- //全局-可以接收参数
- @Extend(Text) function fancyText(weightValue: number, color: Color) {
- .fontStyle(FontStyle.Italic)
- .fontWeight(weightValue)
- .backgroundColor(color)
- }
-
- @Entry
- @Component
- struct FancyUse {
- @State label: string = 'Hello World'
-
- build() {
- Row({ space: 10 }) {
- Text(`${this.label}`)
- .fancyText(100, Color.Blue)
- Text(`${this.label}`)
- .fancyText(200, Color.Pink)
- Text(`${this.label}`)
- .fancyText(300, Color.Orange)
- }.margin('20%')
- }
- }
stateStyles是属性方法,可以根据UI内部状态来设置样式,类似于css伪类,但语法不同。ArkUI提供以下四种状态:
- @Entry
- @Component
- struct StateStylesSample {
- build() {
- Column() {
- Button('Click me')
- .stateStyles({
- focused: {
- .backgroundColor(Color.Pink)
- },
- pressed: {
- .backgroundColor(Color.Black)
- },
- normal: {
- .backgroundColor(Color.Yellow)
- }
- })
- }.margin('30%')
- }
- }
- 定义的语法:
- @Builder MyBuilderFunction(){ ... }
-
- 使用方法:
- this.MyBuilderFunction(){ ... }
-
- //下面例子:
-
- @Component
- struct TaskList{
- build(){
- Column(){
- Button('添加')
- .width(200)
- .margin({top:20,bottom:10})
- .onClick(()=>{
- 使用方法:
- this.MyBuilderFunction(){ ... }
- })
- }
- }
- 定义方法
- @Builder MyBuilderFunction(){ ... }
-
- }
-
-
-
- 定义的语法:
- @Builder function MyGlobalBuilderFunction(){ ... }
-
- 使用方法:
- MyGlobalBuilderFunction()
-
- //下面例子
-
- @Builder function MyGlobalBuilderFunction() {
- //todo
- }
- @Entry
- @Component
- struct Demo{
- @State label: string = 'Hello';
- build() {
- Column() {
- Button('Click me').onClick(() => {
- MyGlobalBuilderFunction()
- })
- }
- }
- }
当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题,ArkUI引入了@BuilderParam装饰器,@BuilderParam用来装饰指向@Builder方法的变量,开发者可在初始化自定义组件时对此属性进行赋值,为自定义组件增加特定的功能。该装饰器用于声明任意UI描述的一个元素,类似slot占位符。
- @Builder function GlobalBuilder0() {}
-
- @Component
- struct Child {
- @Builder doNothingBuilder() {};
-
- @BuilderParam aBuilder0: () => void = this.doNothingBuilder;
- @BuilderParam aBuilder1: () => void = GlobalBuilder0;
- build(){}
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。