ArkTS自定义组件

一、自定义组件基本结构

// 定义自定义组件 ButtonCom.ets
@Component
export struct BtnCom{@State msg: string = "按钮";build() {Row(){Text(this.msg).onClick(() => {this.msg = "测试"})}}
}
// 引入自定义组件
import {BtnCom} from "./ButtonCom"
@Entry
@Component
struct Index {@State message: string = 'Hello World'build() {Row() {Column() {// 使用BtnCom()Divider()Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Divider()BtnCom()}.width('100%')}.height('100%')}
}

struct

自定义组件基于struct 实现,struct +自定义组件名+{...} 的组合构成自定义组件,不能有继承关系。对于struc的实例化,可以省略new。
注:自定义组件名、类名、函数名不能和系统组件名相同。

@Component

装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰具备组件化的能力,需要实现build方法描述UI,一个struct只能被一个@Component装饰。

build函数

build( )函数用于定义自定义组件的声明式UI描述,也就是自定义组件必须定义build()函数。

@Entry

该装饰器的自定义组件将作为UI页面的入口,在单个UI页面中,最多可以使用@Entry装饰一个自定义组件。

二、自定义组件成员变量定义及初始化

// 定义 BtnComponent ,成员变量为:name、age
@Component
struct BtnComponent{private name: string = "lxc";private age: number;build() {Text(`${this.name}_${this.age}`)}
}

1、初始化自定义组件中的成员变量

@Entry
@Component
struct Index {@State message: string = 'Hello World'@State age: number = 20build() {Row() {Column() {// 使用自定义组件,及初始化 name和ageBtnComponent({name: this.message, age: this.age})}.width('100%')}.height('100%')}
}

效果如下:

build( ) 函数

所有声明在build() 函数的语句,统称为:UI描述,UI描述需要遵循以下规则:
(1)@Entry 装饰的自定义组件,其build() 函数下的根节点,唯一且必要(也就是说build()函数下必须且只有一个根节点),且必须为根组件。

@Component
struct Index {@State message: string = 'Hello World'@State age: number = 20build(){// Row 为根节点,且 是容器组件Row() {Column() {BtnComponent({name: this.message, age: this.age})Divider()Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

(2)@Component装饰的自定义组件,其build() 函数下的根节点唯一且必要,根节点可以为非容器组件。

@Component
struct BtnComponent{private name: string;private age: number;build() {// Text 为根节点组件,且不是容器组件Text(`${this.name}_${this.age}`)}
}

三、自定义组件的通用样式

自定义组件可以通过链式调用的形式设置通用样式。
注意事项:
ArkUI给自定义组件设置样式时,相当于给 BtnComponent 套了个不可见的容器组件,而这些样式是设置在容器组件上的,而非直接设置给BtnComponent 组件的 Text 组件上。背景颜色灰色并没有直接生效在Text上,而是生效在Text 所处的开发者不可见的容器组件上。

@Component
struct BtnComponent{private name: string;private age: number;build() {Text(`${this.name}_${this.age}`)}
}
@Entry
@Component
struct Index {@State message: string = 'Hello World'@State age: number = 20build(){Row() {Column() {// 为组件设置样式BtnComponent({name: 'lxc', age: 20}).width(200).height(200).backgroundColor(Color.Gray)}.width('100%')}.height('100%')}
}


 

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

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

相关文章

动物常见图像的图像分类数据集

常见动物图像分类数据集 数据集: 链接:https://pan.baidu.com/s/1zZnCUZuNlX6MjuZImlDjTw?pwd03b9 提取码:03b9 数据集信息介绍: 文件夹 大象 中的图片数量: 1446 文件夹 松鼠 中的图片数量: 1862 文件夹 河马 中的图片数量:…

理解和处理不同类型的上下文的新型的语言模型ReALM

在人类的日常交流中,模糊的代词如“他们”或“那个”常常出现,它们的意义通常依赖于上下文才能明确。这种上下文的理解对于对话助手来说至关重要,因为它们旨在提供一种自然的交流体验。然而,现有的对话助手在处理这类模糊引用时往…

SAP查看接口日志

大部分SAP项目都会与其他外围系统进行集成,那么日常工作中,如果遇到接口传输问题,我们应该怎样查询呢? 也许这篇文章可以稍微解答一些基础的内容。 1、事务代码SXI_MONITOR检查接口日志: 执行的起止日期默认带出&…

oracle11g rac静默dbca创建实例反复报监听问题

问题 处理方法 手动创建监听程序 重新静默dbca建库

Hume AI 将无比强大的情感AI聊天机器人带到了iPhone平台免费使用

总部位于美国的Hume AI研究实验室,致力于开发“针对人类福祉进行优化”的系统,最近推出了其EVI平台的iOS应用版本——名为Hume:您的个人人工智能。 这款新产品包括名为Kora的新型AI语音,以及对热门新Claude 3.5 Sonnet LLM的支持…

2024.6.25力扣刷题记录-周赛403

目录 一、3194. 最小元素和最大元素的最小平均值 二、3195. 包含所有 1 的最小矩形面积 I 三、3196. 最大化子数组的总成本 四、3197. 包含所有 1 的最小矩形面积 II 博主在比赛时只过了前两题。剩下跟着灵神做,来自视频: 【状态机 DP【力扣周赛 403…

Deepl网页版使用方法

Deepl网页版科学使用方法 Deepl 网页版使用方法重要链接使用方式一、在没有使用插件前的Deepl界面二、安装DeepL.Crack.v1.2.7插件三、插件安装后打开[Deepl官网](https://www.deepl.com/zh/translator)即可四、在翻译整篇文章的权限怎么设置 Deepl 网页版使用方法 重要链接 …

rider出现PluginException导致无法启动

目录 项目场景: 问题描述 原因分析: 解决方案: 项目场景: 由于deepinshot不适用于wayland,ubuntu自带的截图又难用的很,所以换了一款截图软件,叫flameshot,可支持在wayland上使…

基于SaaS平台的iHRM管理系统测试学习

目录 目录 1、登录模块 2、员工管理模块 3、Postmannewman软件的安装,学习 1、Postman的使用 2、Postman断言 3、全局变量和环境变量 4、请求时间戳 5、Postman关联 6、批量执行测试用例 7、Postman生成测试报告 8、Postman读取外部数据文件&#xff08…

昇思25天学习打卡营第01天|基本介绍

作为曾经的javaer,本着不断学习的初心,报名了昇思25天的课程,希望自己能学会点东西的目的。 昇思MindSpore介绍 昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标。 其中,…

【干货】Jupyter Lab操作文档

Jupyter Lab操作文档1. 使用须知2. 定制化Jupyter设置主题显示代码行数设置语言更多设置 3. 认识Jupyter界面4. 初用Jupyter运行调试格式化查看源码 5. 使用Jupyter Terminal6. 使用Jupyter Markdown7. 上传下载文件(云服务器中的Jupyter Lab)上传文件到…

LeetCode 算法:二叉树的层序遍历 c++

原题链接🔗:二叉树的层序遍历 难度:中等⭐️⭐️ 题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:roo…

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始…

【Docker】容器

目录 1. 容器启动 2. 容器启动/重启/停止 3. 进入容器 4. 容器查询 5. docker 镜像的构建 方式一:docker 容器 commit 方式二:Dockerfile 定制镜像 1. 容器启动 docker run –it/-d –p/P –name imageID/name 2. 容器启动/重启/停止 docker sta…

Linux-笔记 全志T113移植正点4.3寸RGB屏幕笔记

目录 前言 线序整理 软件 显示调试 触摸调试 背光调试 前言 由于手头有一块4.3寸的RGB屏幕(触摸IC为GT1151),正好开发板上也有40Pin的RGB接口,就想着给移植一下,前期准备工作主要是整理好线序,然后用转接板与杜邦线连接验证好…

vue3+ts:监听dom宽高变化函数

一、效果展示 二、代码 getSize.ts import { ref, Ref, watchEffect } from "vue";export const getWidth (domRef: Ref<HTMLElement | null>) > {const width ref<number>(0);const height ref<number>(0);const observer new ResizeObs…

Qt事件传递顺序是怎样的?

1、事件传递顺序规则 在Qt中&#xff0c;事件传递的顺序事件首先传递到目标对象的事件过滤器&#xff0c;然后传递到事件处理函数&#xff0c;最后传递到父对象的事件过滤器和事件处理函数。 为了更好地理解这一过程&#xff0c;下面将通过一个示例来展示事件在父窗口和子窗口…

投票多功能小程序(ThinkPHP+Uniapp+FastAdmin)

&#x1f389;你的决策小助手&#xff01; 支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c;Uniapp提供全部无加密源码。​ 一、引言&#xff1a;为什么我们需要多功能投票小程序&#…

小程序的基本使用

【 0 】前言 【 0 】 这个就是js代码的存放地方 app.json // pages/banner/banner.js Page({/*** 页面的初始数据*/data: {},/*** 生命周期函数--监听页面加载*/onLoad(options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示…

【安卓13 源码】RescueParty救援机制

RescueParty机制正是在这个背景下诞生的&#xff0c;当它注意到系统或系统核心组件陷入循环崩溃状态时&#xff0c;就会根据崩溃的程度执行不同的救援行动&#xff0c;以期望让设备恢复到正常使用的状态。 开机后会自动重启&#xff0c;进入Recovery界面。经查找&#xff0c;是…