这篇文章介绍一个装饰器 @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. 鸿蒙NEXT开发案例:亲戚关系计算器

    [引言] 在快节奏的现代生活中,人们往往因为忙碌而忽略了与亲戚间的互动,特别是在春节期间,面对众多的长辈和晚辈时,很多人会感到困惑,不知道该如何正确地称呼每一位亲戚.针对这一问题,我们开发了一款基于鸿 ...

  2. .NET9 EFcore支持早期MSSQL数据库 ROW_NUMBER()分页

    前言 NET程序员是很幸福的,MS在上个月发布了NET9.0RTM,带来了不少的新特性,但是呢,我们是不是还有很多同学软硬件都还没更上,比如,自己的电脑还在跑Win7,公司服务器还在跑MSSQL200 ...

  3. 抓包工具之Charles(mac)

    下载地址:https://www.charlesproxy.com/download/ 因为软件是收费的,所以破解方式可以参考:https://www.zzzmode.com/mytools/char ...

  4. 鸿蒙NEXT元服务:利用App Linking实现无缝跳转与二维码拉起

    [效果] 元服务链接格式(API>=12适用):https://hoas.drcn.agconnect.link/ggMRM 生成二维码后效果: ​ [参考网址] 使用App Linking实现 ...

  5. mysql 自定义函数写法

    1.业务场景 有时候我们希望通过sql语句解决一些复杂的问题,比如根据一个ID 查询组织的路径.这个时候我们可以使用函数来实现. 2.函数编写 CREATE FUNCTION getGroupById ...

  6. S2P销讯通·CRM-移动的客户关系精细化管理

    S2P销讯通·CRM是一款专为医药企业设计的移动客户关系管理软件.该软件安装在手机上,集主数据管理.辖区指标管理.客户管理.SFE管理.OTC动销管理.精细化招商管理.市场活动管理以及流向采集清洗与统 ...

  7. CentOS上配合nginx 使用 Certbot 生成SSL证书

    您可以使用 Let's Encrypt 来申请免费的 SSL 证书.以下是在 CentOS 上安装 Certbot 并使用它来获取 Let's Encrypt SSL 证书的步骤: 安装 Certbo ...

  8. ArkTs布局入门02——弹性布局(Flex)

    1.概述 弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列.对齐和分配剩余空间.容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸称为主轴尺寸,在交叉轴方向的尺寸称为 ...

  9. manim边学边做--旋转

    本篇介绍Manim中的两个旋转类的动画,名称差不多,分别是Rotate和Rotating. Rotate类主要用于对图形对象进行指定角度.围绕特定点的精确旋转,适用于几何图形演示.物理模拟和机械运动展 ...

  10. 加密Python项目代码之把Django或Flask项目打包成exe

    目录 python代码仿泄露方案 -方案一:启动起来,把源代码删除 -方案二:pipinstaller 打包成可执行文件 -方案三:做到docker镜像中--->运行容器--->-e pa ...