鸿蒙页面开发 - 扩展组件样式 @Extend
这篇文章介绍一个装饰器 @Extend,它的主要作用是:用于扩展原生组件的样式
比如我们扩展 Text 组件的样式,为其添加一个默认的 fontSize 和 fontColor,如下:
@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()})
}
}
}
总结
@Extend支持组件的私有属性和私有方法。并且只能在全局定义,不支持组件内部定义 (@Styles只支持通用属性和通用方法,可以在全局定义,也可以在组件内定义)@Extend支持传参,也可以传入状态变量,当变量改变的时候,UI也会重新渲染(@Style不支持传参)
最后
如果大家有不理解的地方可以留言,或自行阅读文档 文档地址
鸿蒙页面开发 - 扩展组件样式 @Extend的更多相关文章
- vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03
目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...
- 如何有效地开发 Jmix 扩展组件
扩展组件的概念在使用 Jmix 框架开发中扮演着非常重要的角色.我们将在本文探索什么是扩展组件以及 Jmix Studio 在扩展组件开发和应用程序模块化方面能给开发者带来什么帮助. Jmix 中的扩 ...
- vue+Elment-UI,修改element组件样式
在用vue开发项目过程中,我们总是避免不了的会使用到elementUI,它里面提供的一些组件都为我们的开发带来了很大的便利,但是,当有时候我们需要使用这些组件的同时又要修改下组件的UI样式的话,我们该 ...
- 从微信小程序到鸿蒙js开发【05】——tabs组件&每日新闻
目录: 1.tabs, tab-bar, tab-content 2.tabs的事件处理 3.tabs实现的每日新闻 1.tabs, tab-bar, tab-content 上章说到,鸿蒙的list ...
- iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换
iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换 不多说直接上效果图和代码 1.设置RootViewController为一个导航试图控制器 // Copyright © 2016年 ...
- 【鸿蒙应用开发】使用确切位置布局(PositionLayout)实现登录页面
上一节我们了解了PositionLayout(确切位置布局,我更倾向于称为绝对布局),虽然应用场景稀少.维护不方便,但是该有的示例还是不能少. UI图拆解及代码实现 这个界面我们是不是很熟悉,打开浏览 ...
- 从微信小程序到鸿蒙js开发【11】——页面路由
目录: 1.router.push()&wx.navigateTo() 2.router.replace()&wx.redirectTo() 3.router.back()&w ...
- html单页面通过cdn引入element-ui组件样式不显示问题
html单页面通过cdn引入element-ui组件样式不显示问题 必须先引入vue,再通过cdn引入element,否则element-ui组件与样式无效. <!DOCTYPE html> ...
- 最全华为鸿蒙 HarmonyOS 开发资料汇总
开发 本示例基于 OpenHarmony 下的 JavaScript UI 框架,进行项目目录解读,JS FA.常用和自定义组件.用户交互.JS 动画的实现,通过本示例可以基本了解和学习到 JavaS ...
- Vue基础语法-数据绑定、事件处理和扩展组件等知识详解(案例分析,简单易懂,附源码)
前言: 本篇文章主要讲解了Vue实例对象的创建.常用内置指令的使用.自定义组件的创建.生命周期(钩子函数)等.以及个人的心得体会,汇集成本篇文章,作为自己对Vue基础知识入门级的总结与笔记. 其中介绍 ...
随机推荐
- 读书笔记-C#8.0本质论-06
18.4 并行迭代 如果一个对CPU资源占用较大的计算可以很容易被分割为多个彼此完全独立的部分以任意顺序执行,则要使用并行循环.示例如下: using System; using System.Col ...
- NoSQL一致性
上面我们讲到了通过将数据冗余存储到不同的节点来保证数据安全和减轻负载,下面我们来看看这样做引发的一个问题:保证数据在多个节点间的一致性是非常困难的.在实际应用中我们会遇到很多困难,同步节点可能会故障, ...
- golang模板库之fasttemplate
简介 fasttemplate是一个比较简单.易用的小型模板库.fasttemplate的作者valyala另外还开源了不少优秀的库,如大名鼎鼎的fasthttp,前面介绍的bytebufferpoo ...
- golang之媒体处理
[视频] 获取视频封面图: 1) 如果是使用oss的话, 可以添加指定的后缀生成指定图片 视频截帧: https://help.aliyun.com/zh/oss/user-guide/video-s ...
- 一文聊清楚Redis主从复制原理
本地缓存带来的挑战 分布式缓存相比于本地缓存,在实现层面需要关注的点有哪些不同.梳理如下: 维度 本地缓存 集中式缓存 缓存量 受限于单机内存大小,存储数据有限 需要提供给分布式系统里面所有节点共同使 ...
- Win10虚拟机安装Docker解决Docker Engine Stopped问题记录
跟着网上的帖子开启WSL2安装DockerDesktop, 但是无法启动Docker,一直[Docker Engine stopped] 继续跟着网上的帖子解决问题,检查电脑各种配置都搞一通后还是无法 ...
- R数据分析:冲击流图与热图的做法以及多图布局
今天看了一篇新冠肺炎相关后遗症的文章,主要探讨新冠住院病人一年后的后遗症情况,文章的统计分析很简单,不过结果展示中的两个图我觉的大家可以学一学,原文如下 Rivera-Izquierdo, M., L ...
- 3.QMainWindow
QMainWindow介绍 QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar),多个工具栏(tool bars),多个铆接部件(dock widgets),一个状 ...
- 明察秋毫--用ss工具统计网络栈内存使用
前言 本文介绍了用ss工具来统计一下当前网络栈的内存使用情况 环境准备 组件 版本 操作系统 Ubuntu 22.04.4 LTS 查看socket内存相关参数,-m 参数 ss -tm State ...
- Dockerr安装Oracle以及使用DBeaver连接
拉取镜像 pull container-registry.oracle.com/database/free:latest 创建容器 说明一下我现在的最新版本是23 docker run -d --na ...