如下代码,可以发现每个元素的样式一致,这时就可以将公共样式封装起来
此时可以使用@Styles
修饰符将公共样式进行封装
@Styles修饰符
@Entry
@Component
struct Index{
build() {
Column(){
Text('我是Text')
.ComStyle()
Button('我是Button')
.ComStyle()
Image('')
.ComStyle()
}
.width('100%')
}
}
@Styles function ComStyle(){
.width('80%')
.height(100)
.margin({bottom:20})
.backgroundColor(Color.Pink)
}
不仅可以将样式封装到全局,还可以在组件内部声明,具体封装到哪里需要根据使用场景自行判断,一般多组件公用样式需要写到全局。
注意
:组件内部声明时不需要写function关键字
@Entry
@Component
struct Index{
build() {
Column(){
Text('我是Text')
.ComStyle()
Button('我是Button')
.ComStyle()
Image('')
.ComStyle()
}
.width('100%')
}
@Styles ComStyle(){
.width('80%')
.height(100)
.margin({bottom:20})
.backgroundColor(Color.Pink)
}
}
@Extend修饰符
尝试封装Text的样式,发现不仅书写时没有代码提示,而且出现以下报错,原因是fontSize并不是通用属性(每个组件都有的样式)。
此时需要使用另一个装饰器,@Extend,使用方法基本同@Styles,不过@Extend(组件名)需要选择继承哪个组件。
@Extend(Text) function TextStyle(){
.fontSize(40)
}
特别注意
:@Extend只能写在全局!!!在组件内部声明时会报错。
动态样式
使用@Extend修饰符时,可以接收参数做到动态样式。
封装样式
@Extend(Text) function TextStyle(h:number){
.width('80%')
.height(h)
.margin({bottom:20})
.backgroundColor(Color.Pink)
}
调用
.TextStyle(200)
注意:
只有@Extend修饰符才可以传参!!!使用@Styles传参会报错!!!
公共样式中也可以封装事件回调
可以把原先的事件回调当作参数传递给样式函数
封装前写法:
将回调传递给样式函数即可
注意
:@Extend可以接收参数,@Styles不可以!!!