【鸿蒙HarmonyOS开发笔记】组件编程技巧之样式复用

样式复用

概述

当多个组件具有相同的样式时,若每个组件都单独设置,将会有大量的重复代码。为避免重复代码,开发者可使用@Styles或者@Extend装饰器将多条样式设置提炼成一个方法,然后直接在各组件声明的位置进行调用,这样就能完成样式的复用。


@Styles方法

@Styles方法可定义在组件内或者全局,具体语法如下

● 组件内

@Entry
@Component
struct StylesPage {build() {Column() {Row({ space: 50 }) {Button('确认').type(ButtonType.Normal).backgroundColor(Color.Green).compButtonStyle() //复用样式.onClick(() => console.log('确认'))Button('取消').type(ButtonType.Normal).backgroundColor(Color.Gray).compButtonStyle() //复用样式.onClick(() => console.log('取消'))}}.width('100%').height('100%').justifyContent(FlexAlign.Center)}//组件内样式定义@Styles compButtonStyle() {.width(100).height(40).borderRadius(10)}
}

● 全局

@Entry
@Component
struct StylesPage {build() {Column() {Row({ space: 50 }) {Button('确认').type(ButtonType.Normal).backgroundColor(Color.Green).globalButtonStyle() //复用样式.onClick(() => console.log('确认'))Button('取消').type(ButtonType.Normal).backgroundColor(Color.Gray).globalButtonStyle() //复用样式.onClick(() => console.log('取消'))}}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}//全局样式定义
@Styles function globalButtonStyle() {.width(100).height(40).borderRadius(10)
}

注意

  1. 组件内的@Styles方法只能在当前组件中使用,全局的@Styles方法目前只允许在当前的.ets文件中使用
  2. 组件内定义@Styles方法时不需要使用function关键字,全局的@Styles方法需要使用function关键字
  3. @Styles方法中只能包含通用属性方法和通用事件方法
  4. @Styles方法不支持参数

@Extend方法

@Extend装饰的方法同样可用于组件样式的复用,与@Styles不同的是,@Extend方法只能定义在全局。并且@Extend方法只能用于指定类型的组件,例如以下方法只能用于Button组件(可以理解为是Button组件的扩展样式)

@Extend(Button) function buttonStyle(){...
}

由于@Extend方法只能用于指定类型的组件,因此方法中可包含指定组件的专有属性方法和专有事件方法。另外,@Extend方法还支持参数,具体语法如下

@Entry
@Component
struct ExtendPage {build() {Column() {Row({ space: 50 }) {Button('确认').buttonExtendStyle(Color.Green, () => console.log('确认')) //复用样式Button('取消').buttonExtendStyle(Color.Gray, () => console.log('取消')) //复用样式}}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}//样式定义
@Extend(Button) function buttonExtendStyle(color: Color, callback: () => void) {.width(100).height(40).borderRadius(10).type(ButtonType.Normal).backgroundColor(color).onClick(callback)
}

总结

  1. @Extend方法只能定义在全局,使用范围目前只限于当前的.ets文件
  2. @Extend方法用于特定类型的组件,因此可包含该组件的专有属性方法和专有事件方法
  3. @Extend方法支持参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/762703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国贸易金融跨行交易区块链平台CTFU、区块链福费廷交易平台BCFT、中国人民银行贸易金融区块链平台CTFP、银行函证区块链服务平台BPBC

中国人民银行贸易金融区块链平台CTFP介绍 贸易金融的发展概况及存在的问题 1.1 贸易金融的概况 贸易金融是指商业银行在贸易双方债权债务关系的基础上,为国内或跨国的商品和服务贸易提供的贯穿贸易活动整个价值链、全程全面性的综合金融服务。伴随全球化的进程&a…

Docker安装配置

1. 安装docker-ce sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum -y install docker-ce sudo systemctl enable docker 2. 设置代理 参照:https://docs.docker.com/config/daemon/systemd/#httpht…

基于yolov5的单目测距实现与总结+相机模型+标定

写这篇文章的目的是为了总结我之前看的标定,相机模型以及单目测距的内容,如果有错误,还请不吝赐教。 参考链接: 相机模型、相机标定及基于yolov5的单目测距实现 深度学习目标检测目标追踪单目测距 单目测距代码部署(目…

深度学习入门:pytorch基础学习、各模块解析、调优技巧和问题结局

整理了一下之前写的深度学习基础知识文章,方便浏览! 1. pytorch基础学习系列文章,里面代码和示例 《PyTorch深度学习实践》05 用PyTorch实现线性回归 《PyTorch深度学习实践》06 用PyTorch实现Logistic回归 《PyTorch深度学习实践》07加载数…

【Flask开发实战】防火墙配置文件解析(二)之shell读取内容

一、前言 上一篇文章中,介绍了防火墙配置文件包含的基本元素和格式样式,并模拟了几组有代表性的规则内容,作为基础测试数据。在拿到基础测试数据后,关于我们最终想解析成的数据是什么样式的,其实不难看出,…

Dynamo设置明细表字段格式——保留小数位数

Hello大家好!我是九哥~ 今天简单分享一个API的用法,就是设置明细表的中字段的字段格式。 本次呢,主要介绍下如何通过Dynamo设置长度、面积等几种字段的格式,设置小数位数的显示,如下图: 当然了&#xf…

基于ssm的网络游戏公司官方平台设计与实现论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对网络游戏信息管理混乱,出错率高,信息安全性差…

Spark面试整理-解释RDD的宽依赖和窄依赖以及它们对Spark任务调度的影响

在Apache Spark中,RDD(弹性分布式数据集)的依赖关系分为两种类型:窄依赖(Narrow Dependency)和宽依赖(Wide Dependency)。这些依赖关系定义了RDD之间的关联方式,对Spark的任务调度和性能有重要影响。 窄依赖(Narrow Dependency) 定义:在窄依赖中,每个父RDD的分区最…

java零钱兑换(力扣Leetcode322)

零钱兑换 力扣原题链接 问题描述 给你一个整数数组 coins ,表示不同面额的硬币,以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少 的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可…

函数递归的总结回顾

函数递归的本质就是其名字——递与归。先递出去, 再收回来。 而递归的思想就是为了让一个复杂的问题变成一个简单的问题 按照我目前的理解,函数递归有两点很重要。一个是它的限定条件,另一个就是函数体内“自调”(就是自我调用语句…

1-Flume中agent的source

Flume(1.11.0版本) 简介 概述 Flume本身是由Cloudera公司开发的后来贡献给了Apache的一套针对日志数据进行收集(collecting)、汇聚(aggregating)和传输(moving)的机制 Flume本身提供了简单且灵活的结构来完成日志数据的传输 Flume有两大版本&#x…

jQuery 选择器--获取元素

文章目录 1 jQuery 基础选择器2 层级选择器3 隐式迭代(重要)4 jQuery 筛选选择器5 jQuery 筛选方法(重点)案例--下拉菜单 6 jQuery 排他思想*案例--左右Tab栏切换 7 jQuery 链式编程 1 jQuery 基础选择器 2 层级选择器 3 隐式迭代(重要) 示例: 4 jQuery 筛选选择器…

oracle表备份及还原

工作中,经常使用Navicat访问及操作Oracle数据库,备份表非常方便Ctrlc、Ctrlv;最近备份表,发现这种操作有问题;数据表有2条检查,使用Ctrlc、Ctrlv操作,发现新备份的表出现4条检查,再对…

Python实战:命令行工具开发

本文将深入探讨如何使用Python开发一个命令行工具。我们将从项目规划、功能实现、用户交互、错误处理和测试等方面进行详细讲解。我们将展示如何使用Python标准库中的argparse模块来处理命令行参数,以及如何构建一个功能完整、易于使用的命令行工具。 一、引言 命…

冷库制冷量计算与机组、换热器、膨胀阀选型配管

1、冷库冷负荷估算: 能计算出冷库耗冷量需要提供的最基本条件: 货物种类; 库房尺寸(长宽高); 储藏量,吨; 进货量,吨/天; 冷却时间,小时; 进货温度,℃; 出货温度,℃。 2、冷库贮存量计算: 冷库吨位计算公式:G=∑Vlρsη/1000 式中: G—冷库吨位(t); Vl—冷…

流畅的 Python 第二版(GPT 重译)(十二)

第五部分:元编程 第二十二章:动态属性和属性 属性的关键重要性在于,它们的存在使得将公共数据属性作为类的公共接口的一部分完全安全且确实可取。 Martelli、Ravenscroft 和 Holden,“为什么属性很重要” 在 Python 中&#xff0…

前端如何一次处理十万条数据的渲染

前端如何一次处理十万条数据的渲染 一、下载第三方插件二、在入口文件引入三、示例 一、下载第三方插件 npm install --save el-table-infinite-scroll二、在入口文件引入 import ElTableInfiniteScroll from "el-table-infinite-scroll"; Vue.use(ElTableInfinite…

docker 配置国内阿里镜像源

在/etc/docker/目录下新建daemon.json文件 在文件中写入 {"registry-mirrors": ["https://jmphwhtw.mirror.aliyuncs.com"] } 以管理员身份运行命令 systemctl daemon-reload systemctl restart docker

项目中如何进行限流(限流的算法、实现方法详解)

❤ 作者主页:李奕赫揍小邰的博客 ❀ 个人介绍:大家好,我是李奕赫!( ̄▽ ̄)~* 🍊 记得点赞、收藏、评论⭐️⭐️⭐️ 📣 认真学习!!!🎉🎉 文章目录 限流的算法漏…

MFO-CNN-LSTM多输入分类预测|飞蛾扑火算法优化的卷积-长短期神经网络|Matlab

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…