这篇文章介绍一个装饰器 @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. mysql - 修改字段名称 & 修改字段数据类型

    修改字段名称: ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>: mysql> ALTER TABLE ...

  2. Impala学习--Impala概述,Impala系统架构

    Imapla概述 Impala是Cloudera公司的一个实时海量查询产品.是对于已有Hive产品的补充.Impala采用了和Hive相同的类SQL接口,但并没有采用MapRed框架执行任务,而是采用 ...

  3. Postman无法启动

    前情 最近在捣鼓node.js,需要一个接口测试工具,而Postman是业界有名的接口测试工具,自然接口测试就用它了. 坑 已经有一段时间没启动Postman了,突然发现启动一直卡在修复界面,重启也不 ...

  4. Redis应用—3.在购物车里的应用

    大纲 1.社区电商购物车的读多写多场景分析 2.购物车的复杂缓存与异步落库(Sorted Set + Hash -> hPut + zadd) 3.购物车异步落库与完整加入流程(缓存雪崩 + M ...

  5. Flutter WebView报错ERR_NAME_NOT_RESOLVED

    WebView报错ERR_NAME_NOT_RESOLVED 用的webview_flutter插件,开始都用的好好的,后面突然报错ERR_NAME_NOT_RESOLVED,上网逛了一圈说如果要用h ...

  6. Java 后端搞 MVC 是邪路

    前两天和朋友讨论,我展示了一番 d2js,朋友有点纳闷,你这个是直接操作数据库,不是违背了 MVC 设计思想吗? 经常讨论有助于刺激思维.这次本人忽然进入了状态,终于意识到问题所在! 现在的系统叠床架 ...

  7. [转]OpenSSL主配置文件openssl.cnf

    https://www.cnblogs.com/f-ck-need-u/p/6091027.html openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/ ...

  8. Failed to start bean 'webServerStartStop'; nested exception is org.springframework.beans.FatalBeanException: ServletWebServerFactory implementation

    使用jeecgboot报错 jeecg单测跑不起来,报错如下 Failed to start bean 'webServerStartStop'; nested exception is org.sp ...

  9. PHP API接口数据简单快速的加密解密

    php7.0版本以上不支持mcrypt_encryp函数进行加密的代码,加密方式改为openssl_encrypt 用自己私人的服务器来测试吧,99买阿里云 openssl_系列支持php5.3以上版 ...

  10. Qt音视频开发46-视频传输UDP版

    一.前言 上篇文章写道采用的TCP传输视频,优缺点很明显,优点就是不丢包,缺点就是速度慢,后面换成UDP通信,速度快了很多,少了3次握手,而且在局域网中基本上不丢包,就算偶尔丢包,对于一秒钟25-30 ...