这篇文章介绍一个装饰器 @Extend,它的主要作用是:用于扩展原生组件的样式

比如我们扩展 Text 组件的样式,为其添加一个默认的 fontSizefontColor,如下:

@Entry
@Component
struct Index {
build() {
Text('碧玉妆成一树高,万条垂下绿丝绦。')
.TextExtend()
}
} @Extend(Text)
function TextExtend() {
.fontSize(20)
.fontColor(Color.Blue)
}

通过上面的代码,我们就为 Text 组件扩展了一些样式,让其拥有了默认的字体大小和字体颜色

效果如下:

因为@Extend是作用于单个组件,所以也支持组件的所有属性和事件(包括组件的私有属性),这点和 @Styles 不同

并且他 只能在全局定义,不支持组件内部定义

@Extend支持传参(@Styles不支持)

@Entry
@Component
struct Index {
build() {
Text('碧玉妆成一树高,万条垂下绿丝绦。')
.TextExtend(22)
}
} @Extend(Text)
function TextExtend(fontSize: number) {
.fontSize(fontSize)
.fontColor(Color.Blue)
}

@Extend传的参数,支持传入状态变量,当变量改变时,UI也会重新渲染

@Entry
@Component
struct Index {
@State fontSize: number = 16 build() {
Text('碧玉妆成一树高,万条垂下绿丝绦。')
.TextExtend(this.fontSize)
.onClick(() => {
this.fontSize = 24
})
}
} @Extend(Text)
function TextExtend(fontSize: number) {
.fontSize(fontSize)
.fontColor(Color.Blue)
}

效果如下:

@Extend支持调用其他方法,继承其他方法的属性

比如在 TextExtend_1 中定义字体的大小、颜色。在 TextExtend_2 定义背景颜色,并且在 TextExtend_2 中调用 TextExtend_1 方法

@Entry
@Component
struct Index {
build() {
Text('碧玉妆成一树高,万条垂下绿丝绦。')
.TextExtend_2()
}
} @Extend(Text)
function TextExtend_1() {
.fontSize(20)
.fontColor(Color.Blue)
} @Extend(Text)
function TextExtend_2() {
.backgroundColor(Color.Gray)
.TextExtend_1()
}

@Extend装饰的方法,参数可以为function,作为Event事件的句柄。

@Extend(Text) function makeMeClick(onClick: () => void) {
.backgroundColor(Color.Blue)
.onClick(onClick)
} @Entry
@Component
struct FancyUse {
@State label: string = 'Hello World'; onClickHandler() {
this.label = 'Hello ArkUI';
} build() {
Row({ space: 10 }) {
Text(`${this.label}`)
.makeMeClick(() => {this.onClickHandler()})
}
}
}

总结

  1. @Extend 支持组件的私有属性和私有方法。并且只能在全局定义,不支持组件内部定义 (@Styles只支持通用属性和通用方法,可以在全局定义,也可以在组件内定义)
  2. @Extend 支持传参,也可以传入状态变量,当变量改变的时候,UI也会重新渲染(@Style不支持传参)

最后

如果大家有不理解的地方可以留言,或自行阅读文档 文档地址

鸿蒙页面开发 - 扩展组件样式 @Extend的更多相关文章

  1. vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03

    目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...

  2. 如何有效地开发 Jmix 扩展组件

    扩展组件的概念在使用 Jmix 框架开发中扮演着非常重要的角色.我们将在本文探索什么是扩展组件以及 Jmix Studio 在扩展组件开发和应用程序模块化方面能给开发者带来什么帮助. Jmix 中的扩 ...

  3. vue+Elment-UI,修改element组件样式

    在用vue开发项目过程中,我们总是避免不了的会使用到elementUI,它里面提供的一些组件都为我们的开发带来了很大的便利,但是,当有时候我们需要使用这些组件的同时又要修改下组件的UI样式的话,我们该 ...

  4. 从微信小程序到鸿蒙js开发【05】——tabs组件&每日新闻

    目录: 1.tabs, tab-bar, tab-content 2.tabs的事件处理 3.tabs实现的每日新闻 1.tabs, tab-bar, tab-content 上章说到,鸿蒙的list ...

  5. iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换

    iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换 不多说直接上效果图和代码 1.设置RootViewController为一个导航试图控制器 //  Copyright © 2016年 ...

  6. 【鸿蒙应用开发】使用确切位置布局(PositionLayout)实现登录页面

    上一节我们了解了PositionLayout(确切位置布局,我更倾向于称为绝对布局),虽然应用场景稀少.维护不方便,但是该有的示例还是不能少. UI图拆解及代码实现 这个界面我们是不是很熟悉,打开浏览 ...

  7. 从微信小程序到鸿蒙js开发【11】——页面路由

    目录: 1.router.push()&wx.navigateTo() 2.router.replace()&wx.redirectTo() 3.router.back()&w ...

  8. html单页面通过cdn引入element-ui组件样式不显示问题

    html单页面通过cdn引入element-ui组件样式不显示问题 必须先引入vue,再通过cdn引入element,否则element-ui组件与样式无效. <!DOCTYPE html> ...

  9. 最全华为鸿蒙 HarmonyOS 开发资料汇总

    开发 本示例基于 OpenHarmony 下的 JavaScript UI 框架,进行项目目录解读,JS FA.常用和自定义组件.用户交互.JS 动画的实现,通过本示例可以基本了解和学习到 JavaS ...

  10. Vue基础语法-数据绑定、事件处理和扩展组件等知识详解(案例分析,简单易懂,附源码)

    前言: 本篇文章主要讲解了Vue实例对象的创建.常用内置指令的使用.自定义组件的创建.生命周期(钩子函数)等.以及个人的心得体会,汇集成本篇文章,作为自己对Vue基础知识入门级的总结与笔记. 其中介绍 ...

随机推荐

  1. Tornado框架之项目部署(六)

    知识点 supervisor配置与使用 nginx配置 目录: 部署Tornado 1. supervisor 安装 配置 启动 supervisorctl 2. nginx 部署Tornado 为了 ...

  2. 在线文档-Wiki平台

    GitBook 对于在线文档创作平台,当然还是首推GitBook GitBook为免费用户提供 10个空间(可以私有也可以公开) 支持自定义域名 gitbook本身是一个开源项目,你可以下载源代码自行 ...

  3. Spring Boot 使用 slf4j 进行日志记录

    SLF4J,即简单日志门面(Simple Logging Facade forJava),不是具体的日志解决方案,它只服务于各种各样的日志系统.按照官方的说法,SLF4J 是一个用于日志系统的简单Fa ...

  4. Litctf2024-郑州轻工业大学第二届ctf-校内赛道wp

    战队:怎落笔都不对 最终成绩校内第4 MISC 1. 盯帧珍珠 打开文件发现是一个图片,放入 010 查看得文件头是 gif 格式 改为gif后缀得到一个GIF图,在下面这个网站分解,即可得到flag ...

  5. 《JavaScript 模式》读书笔记(5)— 对象创建模式3

    这一篇,我们主要来学习了解下沙箱模式以及静态成员的相关内容. 五.沙箱模式 沙箱模式(sandbox pattern)解决了命名空间模式的如下几个缺点: 对单个全局变量的依赖变成了对应用程序的全局变量 ...

  6. Python绘制七段数码管字母:从理论到实践

    在现代电子显示技术中,七段数码管是一种广泛应用的显示器件,常用于显示数字.字母和一些特殊符号.其基本原理是通过控制七个发光段(a, b, c, d, e, f, g)的亮灭来形成不同的显示内容.本文将 ...

  7. 关于 Span 的一切:探索新的 .NET 明星: 3.什么是 Memory<T>,以及为什么你需要它?

    3. 什么是 Memory<T>,以及为什么你需要它? 1. Span<T> 是什么? 2. Span<T> 是如何实现的? 3. 什么是 Memory<T& ...

  8. 用 erlang 描述 tcc

    Transaction 视为一个 Actor. start_transaction(Order) -> p1 = spawn(start_order(self, Order.subOrder1) ...

  9. Qt开源作品31-屏幕截图控件

    一.前言 屏幕截图控件在我的很多项目中都有用到,尤其是嵌入式的系统上的软件,因为在嵌入式系统中,基本上系统都很精简,甚至连UI都没有,开机之后直接运行的就是Qt程序,很多时候需要对软件进行截图保存下来 ...

  10. 《jQueryEasyUI从零开始学》-施尧2018一书的配套源代码和学习资源

    <jQueryEasyUI从零开始学>-施尧2018一书的配套源代码和学习资源:下载地址 提取码:uuly