当前位置: 首页 > news >正文

HarmonyOS开发:ArkTS初识

ArkTS基本语法

ArkTS语言简介

ArkTS是鸿蒙生态的应用开发语言。基本语法风格与TypeScript(简称TS)相似,在TS的生态基础上进一步扩展,继承了TS的所有特性,是TS的超集。

基本语法概述

扩展能力

基础语法:声明式语法,组件化机制,数据-UI自动关联

@Entry
@Component
struct Index {@State message: string = 'Hello World'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).onClick(()=>{this.message = "你好,世界"})}.width('100%')}.height('100%')}
}

状态管理:ArkTS提供了多维度的状态管理机制。比如数据传递可以在父子组件之间,爷孙组件之间,还可以应用全局范围传递或者跨设备传递。同时,数据的传递可以只单向传递可变更的双向传递。

渲染控制:条件渲染可根据应用的不同状态,渲染对应状态下的UI内容。循环渲染可从数据源中迭代获取数据,并在每次迭代过程中创建相应的组件。数据懒加载从数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。

装饰器:装饰类、结构、方法以及变量。比如:

@Component自定义组件,

@Entry自定义组件为入口组件,

@State组件的状态变量,会触发UI刷新。

UI描述:声明式方式描述UI

系统组件:ArkUI提供的组件

容器组件:用来完成页面布局,例如 RowColumn

基础组件:自带样式和功能的页面元素,例如 Text

属性方法:设置组建的UI样式

事件方法:设置组件的事件回调

声明式UI描述

无参数和有参数组件:通过代码可以看得出来,组件后面“()”有没有配置内容,有就是有参,无则是无参。

Column() {//无参数Text('item 1')//有参数Divider()//无参数Text('item 2')
}

在有参数的组件配置参数格式如下:

image组件的必须参数src

Image('https://xyz/test.jpg')

应用资源采用$r形式引用

// string类型的参数
Text('test')
// $r形式引入应用资源,可应用于多语言场景
Text($r('app.string.title_value'))
// 无参数形式
Text()

变量或者表达式也可以参数赋值,字符串变量嵌套采取${}

Image(this.imagePath)
Image('https://' + this.imageUrl)
Text(`count: ${this.count}`)

配置属性

属性方法以“.”链式调用,比如fontSize(30)、width(this.width)、。具体有什么属性根据组件类型来判断,属性方法和其他语言的属性大同小异。

Text('hello').fontSize(20).fontColor(Color.Red).fontWeight(FontWeight.Bold)

配置事件

事件方法以“.”链式调用的方式配置系统组件支持的事件。

//箭头函数
Button('Click me').onClick(() => {this.myText = 'ArkUI';})//匿名函数表达式
Button('add counter').onClick(function(){this.counter += 2;}.bind(this))//使用bind,以确保函数体中的this指向当前组件//调用函数
myClickHandler(): void {this.counter += 2;
}
...
Button('add counter').onClick(this.myClickHandler.bind(this))

自定义组件

自定义组件的基本结构

@Entry
@Component
struct MyComponent {
}

struct + 自定义组件名 + {...}的组合构成自定义组件,不能有继承关系

@Component仅装饰struct关键字声明的数据结构,一个struct只能被一个@Component装饰。

build()函数用于定义自定义组件的声明式UI描述。

@Entry装饰该自定义组件为UI页面的入口,@EntryUI页面的关系是一对一

tips:自定义组件固定格式必有struct、@Component、build()

成员函数/变量

成员变量:
1.不支持静态成员变量

2.成员变量都是有私有的

3.成员变量的初始化可选可必选

@Component
struct MyComponent {private countDownFrom: number = 0;private color: Color = Color.Blue;build() {}
}@Entry
@Component
struct ParentComponent {private someColor: Color = Color.Pink;build() {Column() {// 创建MyComponent实例,并将创建MyComponent成员变量countDownFrom初始化为10,将成员变量color初始化为this.someColorMyComponent({ countDownFrom: 10, color: this.someColor })}}
}

页面和组件的生命周期和参数传递

生命周期

页面生命周期(@Entry装饰的组件生命周期)

onPageShow:页面每次显示时触发。

onPageHide:页面每次隐藏时触发一次。

onBackPress:当用户点击返回按钮时触发。

组件生命周期(@Component装饰的自定义组件的生命周期)

aboutToApper:组件即将出现时回调该接口;引用组件实例后,执行其build函数之前。

aboutToDisapper:在自定义组件即将销毁时执行

参数传递

参数传递原则

参数类型和参数声明类型一致,不能为null、undefined、undefined或者null的表达式

在函数内部,参数值不可修改,如要修改,可以采取同步回调

参数传递分为按引用传递参数和按值传递

特别注意:传递的参数为状态变量时,按值传递不能引起UI刷新,引用传递可以UI刷新

引用传递函数

CiteData($$: {name: string,age: number}) {}//创建函数{$$.name} //使用参数this.CiteData({ name:this.title,age: 10 }) //使用函数

按值传递函数

ValueData(name: string, age: number){}//创建函数name //使用参数this.ValueData("xxx",10)//使用函数
@Component
struct child {@State title: string = "无名氏"build() {Row() {Column() {this.ValueData(this.title,10)//按值传递 调用方式this.CiteData({ name:this.title,age: 10 })// 引用传递 调用方式Button("点击改变值").onClick(()=>{this.title = '张三'//结果:引用传递的name的UI刷新了,按值传递的name的UI没变化})}.width('100%')}.height('100%')}@Builder CiteData($$: {name: string,age: number}) { //引用传递Text(`引用传递:${$$.name}的年龄是${$$.age}`) //使用方式}@Builder ValueData(name: string, age: number) { //按值传递Text(`按值传递:${name}的年龄是${age}`) //使用方式}

相关文章:

HarmonyOS开发:ArkTS初识

ArkTS基本语法 ArkTS语言简介 ArkTS是鸿蒙生态的应用开发语言。基本语法风格与TypeScript(简称TS)相似,在TS的生态基础上进一步扩展,继承了TS的所有特性,是TS的超集。 基本语法概述 扩展能力 基础语法&#xff1a…...

C++ STL map和set的使用

序列式容器和关联式容器 想必大家已经接触过一些容器如:list,vector,deque,array,forward_list,string等,这些容器统称为系列容器。因为逻辑结构为线性的,两个位置的存储的值一般是…...

VisionPro软件Image Stitch拼接算法

2D图像拼接的3种情景 1.一只相机取像位置固定,或者多只相机固定位置拍图,硬拷贝拼图,采用CopyRegion工具实现 2.一只或多只相机在多个位置拍照,相机视野互相重叠,基于Patmax特征定位后,无缝 拼图&#xff…...

缓存-Redis-缓存更新策略-主动更新策略-Cache Aside Pattern(全面 易理解)

**Cache-Aside Pattern(旁路缓存模式)**是一种广泛应用于缓存管理的设计模式,尤其在使用 Redis 作为缓存层时尤为常见。该模式通过在应用程序与缓存之间引入一个旁路,确保数据的一致性和高效性。本文将在之前讨论的 Redis 主动更新…...

Linux(Centos 7.6)命令详解:cd

1.命令作用 改变当前工作目录(change directory) 2.命令语法 Usage: cd [-L|[-P [-e]]] [dir] 3.参数详解 -L‌,当目标路径是符号链接时,强制使用符号链接,这是一个默认选项。-P‌,使用物理路径代替符号链接。-e‌&#xff0…...

oracle位运算、左移右移、标签算法等

文章目录 位运算基础与或非同或同或应用场景 异或异或应用场景 什么是真值表 oracle基础函数创建bitor(按位或)函数bitnot(按位非)函数bitxor(按位异或)函数左移函数BITSHIFT()函数(实测不可用,废弃掉该方案)右移函数(略,有此场景吗?) 实际应用资质字典…...

预训练语言模型——BERT

1.预训练思想 有了预训练就相当于模型在培养大学生做任务,不然模型初始化再做任务就像培养小学生 当前数据层面的瓶颈是能用于预训练的语料快被用完了 现在有一个重要方向是让机器自己来生成数据并做微调 1.1 预训练(Pre - training)vs. 传…...

基于Thinkphp6+uniapp的陪玩陪聊软件开发方案分析

使用uni-app框架进行前端开发。uni-app是一个使用Vue.js开发所有前端应用的框架,支持一次编写,多端发布,包括APP、小程序、H5等。 使用Thinkphp6框架进行后端开发。Thinkphp6是一个轻量级、高性能、面向对象的PHP开发框架,具有易…...

C++异常处理

C异常处理 C中的异常处理机制是通过try、throw和catch三个关键字来实现的,主要用于捕获和处理程序执行过程中可能出现的错误或异常情况,从而提高程序的健壮性和可维护性。 基本概念 try块:用于定义一个可能抛出异常的代码块。在这个代码块…...

UVM: TLM机制

topic overview 不建议的方法:假如没有TLM TLM TLM 1.0 整个TLM机制下,底层逻辑离不开动作发起者和被动接受者这个底层的模型基础,但实际上,在验证环境中,任何一个组件,都有可能成为动作的发起者&#xff0…...

基于机器学习的故障诊断(入门向)

一、原始信号的特征提取 1.EMD经验模态分解的作用 信号分析:EMD可以将信号分解为多个IMFs,每个IMF代表信号中的一个特定频率和幅度调制的成分。这使得EMD能够提供对信号的时频特征进行分析的能力(特征提取用到的)。信号去噪&…...

Linux 磁盘管理命令:使用xfs 管理命令

文章目录 Linux磁盘管理命令使用xfs 管理命令1.命令说明2.建立 XFS 文件系统4.调整 XFS 文件系统各项参数5.在线调整 XFS 文件系统的大小6.暂停和恢复 XFS 文件系统7.尝试修复受损的 XFS 文件系统8.备份和恢…...

《Spring Framework实战》8:4.1.3.Bean 概述

欢迎观看《Spring Framework实战》视频教程 Spring IoC 容器管理一个或多个 bean。这些 bean 是使用 您提供给容器的配置元数据&#xff08;例如&#xff0c;以 XML <bean/>定义的形式&#xff09;。 在容器本身中&#xff0c;这些 bean 定义表示为BeanDefinition对象&a…...

Spring Boot教程之五十二:CrudRepository 和 JpaRepository 之间的区别

Spring Boot – CrudRepository 和 JpaRepository 之间的区别 Spring Boot建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员…...

MyBatis面试-1

1、什么是MyBatis&#xff1f; MyBatis是一个半ORM框架(对象关系映射)。---》Hibernate全ORM框架 ---》基于JDBC封装的框架 专注于SQL语句&#xff0c;不用关心JDBC操作的其他流程 2、MyBatis有什么优点 基于SQL语句的编程&#xff0c;相对来说会更加的灵活和JDBC相比&#…...

GDPU Android移动应用 重点习题集

目录 程序填空 ppt摘选 题目摘选 “就这两页ppt&#xff0c;你还背不了吗” “。。。” 打开ppt后 “Sorry咯&#xff0c;还真背不了&#x1f61c;” 程序填空 网上摘选的大题也挺合适的&#xff0c;太难的帮大家过滤掉了&#xff0c;大家可以看一下。 ✨SharedPrefere…...

软件开发为什么要用CI/CD方法

现代化业务离不开应用。事实上&#xff0c;62% 的企业认为&#xff0c;应用对其业务至关重要&#xff0c;还有 36% 的企业认为&#xff0c;通过应用提升了竞争优势2。快速可靠的应用开发是在数字世界取得成功的关键。持续集成/持续部署&#xff08;CI/ CD&#xff09;方法可帮助…...

湘潭大学人机交互复习

老师没给题型也没划重点&#xff0c;随便看看复习了 什么是人机交互 人机交互&#xff08;Human-Computer Interaction&#xff0c;HCI&#xff09;是关于设计、评价和实现供人们使用的交互式计算机系统&#xff0c;并围绕相关的主要现象进行研究的学科。 人机交互研究内容 …...

Java高频面试之SE-10

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; equals和 的区别&#xff1f; 在 Java 中&#xff0c;equals() 方法和 运算符都是用于比较两个对象之间的相等性&#xff0c;但它们的工…...

Java 注解详解:RetentionPolicy 与 ElementType

文章目录 1. RetentionPolicy&#xff1a;注解的生命周期RetentionPolicy 的详细说明SOURCE 示例CLASS 示例RUNTIME 示例 2. ElementType&#xff1a;注解的应用范围ElementType 的详细说明ElementType 示例用于类用于方法用于局部变量 3. RetentionPolicy 与 ElementType 的结…...

javafx 将项目打包为 Windows 的可执行文件exe

要将 JavaFX 项目打包为 .exe 文件&#xff0c;你可以使用一些工具将你的应用程序封装为 Windows 可执行文件。以下是两种常用的方法&#xff1a; 方法 1&#xff1a;使用 jpackage&#xff08;适用于 JDK 14 及更高版本&#xff09; jpackage 是 JDK 内置的工具&#xff0c;…...

使用Chrome谷歌浏览器中内置翻译功能

谷歌Chrome浏览器作为全球最受欢迎的网络浏览器之一&#xff0c;提供了强大且便捷的内置翻译功能。这一功能帮助用户轻松跨越语言障碍&#xff0c;浏览试听包括音乐视频直播等网页内容了。 一、启用Chrome内置翻译功能 1、打开谷歌Chrome浏览器&#xff1a;确保你已经安装了最…...

Clojure语言的数据库编程

Clojure语言的数据库编程 引言 在当今社会&#xff0c;数据的处理和管理已经成为一个不可或缺的部分。无论是互联网应用、企业系统还是移动应用&#xff0c;都需要与数据库进行频繁的交互。因此&#xff0c;选择一种合适的编程语言和相应的库来进行数据库编程显得尤为重要。C…...

从零开始:使用VSCode搭建Python数据科学开发环境

引言 在数据科学领域&#xff0c;一个高效、稳定的开发环境是成功的关键。本文将详细介绍如何使用Visual Studio Code搭建一个完整的Python数据科学开发环境。通过本指南&#xff0c;您将学会&#xff1a; 安装和配置VSCode&#xff0c;包括基本设置和快捷键配置设置Python开…...

docker minio镜像arm64架构

minio版本为RELEASE.2021-09-03T03-56-13Z 原项目信创改造&#xff0c;服务器资源改为了arm64架构&#xff0c;统信uos docker镜像库内没有对应的minio镜像&#xff0c;当前镜像为拉取源码后&#xff0c;自编译打包镜像&#xff0c;亲测可用。 使用方式 将tar包导入到服务器…...

arcgisPro加载CGCS2000天地图后,如何转成米单位

1、导入加载的天地图影像服务&#xff0c;一开始是经纬度显示的。 2、右键地图&#xff0c;选择需要调整的投影坐标&#xff0c;这里选择坐标如下&#xff1a; 3、点击确定后&#xff0c;就可以调整成米单位的了。 4、切换后结果如下&#xff1a; 如有需要&#xff0c;可调整成…...

MySQL Binlog 监听方案

如果 EmbeddedEngine 类在 debezium-connector-mysql 中不可用&#xff0c;原因是 Debezium 的新版本移除了 EmbeddedEngine。这是因为 Debezium 的架构变更&#xff0c;它现在鼓励使用 Kafka Connect 或 Debezium Server 来处理数据变更事件。 下面是几种替代方法来实现 MySQ…...

openai swarm agent框架源码详解及应用案例实战

文章目录 简介数据类型Agent类Response类Result类Swarm类run_demo_loop交互式会话 基础应用agent-handsofffunction-callingcontext_variablestriage_agent 高阶应用通用客服机器人(support bot)构建航班服务agent 参考资料 openai 在24年10月份开源了一个教育性质的多agents协…...

Qt 5.14.2 学习记录 —— 팔 QWidget 常用控件(3)

文章目录 1、cursor2、font3、toolTip4、focusPolicy5、styleSheet 1、cursor 改变鼠标光标形状。 在Qt Designer界面中&#xff0c;拖一个按钮过来&#xff0c;右边属性面用户可以自己改cursor属性。 代码方法&#xff0c;先拖一个按钮到界面上&#xff1a; #include <Q…...

Nginx (40分钟学会,快速入门)

目录​​​​​​​ 一、什么是Nginx ? 可以做什么 &#xff1f; 二、正向代理和反向代理 三、负载均衡 四、动静分离 五、Nginx 常用命令 六、Nginx实战及总结 一、什么是Nginx ? 可以做什么 &#xff1f; Nginx 是高性能的 HTTP 和反向代理的 web 服务器&#xff0c…...

C# 中await和async的用法(一)

在 C# 中&#xff0c;await 关键字用于异步编程&#xff0c;配合 async 方法一起使用。await 允许你等待异步操作完成&#xff0c;而不会阻塞当前线程。简而言之&#xff0c;await 会暂停当前方法的执行&#xff0c;直到任务完成&#xff0c;然后继续执行。 1. await与async的关…...

前端JS中var、let、const之间的区别

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、var 二、let 三、const 四、区别 变量…...

【pyqt】(八)ui文件使用

ui文件使用 前面我们已经学过了简单的UI文件创建&#xff08;利用Qt Designer&#xff09;和基础控件的使用。现在我们学习如何把二者融合起来完成开发。UI文件以 XML 格式存储界面的布局和各种控件的属性&#xff0c;我们可以利用Qt Designer开发界面&#xff0c;然后利用代码…...

H2数据库在单元测试中的应用

H2数据库特征 用比较简洁的话来介绍h2数据库&#xff0c;就是一款轻量级的内存数据库&#xff0c;支持标准的SQL语法和JDBC API&#xff0c;工业领域中&#xff0c;一般会使用h2来进行单元测试。 这里贴一下h2数据库的主要特征 Very fast database engineOpen sourceWritten…...

ios越狱脚本巨魔商店安装教程

使用爱思助手安装 安装爱思助手&#xff1a;在电脑上安装 iTunes 和爱思助手&#xff0c;并使用 Apple ID 登录2。 IPA 签名&#xff1a;打开爱思助手&#xff0c;选择工具箱中的 IPA 签名。点击添加 IPA 文件&#xff0c;选择下载的 TrollInstallerX.ipa 文件。选择使用 Apple…...

Linux C编程——文件IO基础

文件IO基础 一、简单的文件 IO 示例二、文件描述符三、open 打开文件1. 函数原型2. 文件权限3. 宏定义文件权限4. 函数使用实例 四、write 写文件五、read 读文件六、close 关闭文件七、Iseek 绍 Linux 应用编程中最基础的知识&#xff0c;即文件 I/O&#xff08;Input、Outout…...

【Rust自学】10.4. trait Pt.2:trait作为参数和返回类型、trait bound

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 说句题外话&#xff0c;写这篇的时间比写所有权还还花的久&#xff0c;trait是真的比较难理解的概念。 10.4.1. 把trait作为参数 继续以…...

Java 中的 getDeclaredMethod() 方法:使用与原理详解

在 Java 反射机制中&#xff0c;getDeclaredMethod() 是一个非常重要的方法&#xff0c;用于获取类中声明的特定方法&#xff08;包括公共、保护、默认和私有方法&#xff09;。与 getMethod() 不同&#xff0c;getDeclaredMethod() 可以访问类的所有方法&#xff0c;而不仅仅是…...

解决npm报错:sill idealTree buildDeps

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 报错信息 使用 npm 安装依赖时报错&#xff1a;sill idealTree buildDeps 解决方案 请按照以下步骤进行相关操作&#xff1a; 1、删除 C:\Users{账户}\ 文件夹中的 .npm…...

【游戏设计原理】55 - 风险评估

从本文讲述的内容来看&#xff0c;其实使用“游戏中的决策”作为标题更合适。 核心观点&#xff1a;玩家在游戏中不断进行决策&#xff0c;这些决策涵盖风险评估、资源分配、策略选择等多个方面&#xff0c;其核心是通过选择实现最大化回报或最小化损失。关键内容&#xff1a;…...

【AI日记】25.01.08

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI 参加&#xff1a;kaggle 比赛 Forecasting Sticker Sales 读书 书名&#xff1a;国家为什么会失败阅读原因&#xff1a;2024 年诺贝尔经济学奖得主的力作未删减版&#xff1a;https://boo…...

SAP BC 同服务器不同client之间的传输SCC1

源配置client不需要释放 登录目标client SCC1...

用Cline打造你的智能搜索助手:Tavily Search MCP集成指南

引言 本文将详细介绍如何在Cline编辑器中集成Tavily Search智能搜索功能。我们将从MCP&#xff08;Model Context Protocol&#xff09;协议基础开始&#xff0c;深入探讨Tavily Search MCP服务器的安装配置、使用方法&#xff0c;以及进阶的二次开发技巧。无论你是AI开发者还…...

未来商贸物流:人工智能与大数据的深度融合

未来商贸物流&#xff1a;人工智能与大数据的深度融合 在当今数字化浪潮汹涌澎湃的时代&#xff0c;商贸物流行业正站在变革的十字路口&#xff0c;而人工智能与大数据宛如一对闪耀的双子星&#xff0c;为其照亮前行的道路&#xff0c;深度融合之下&#xff0c;一个全新的未来…...

网络安全、Web安全、渗透测试之笔经面经总结(三)

本篇文章涉及的知识点有如下几方面&#xff1a; 1.什么是WebShell? 2.什么是网络钓鱼&#xff1f; 3.你获取网络安全知识途径有哪些&#xff1f; 4.什么是CC攻击&#xff1f; 5.Web服务器被入侵后&#xff0c;怎样进行排查&#xff1f; 6.dll文件是什么意思&#xff0c;有什么…...

BMS应用软件开发 — 3 电池系统的组成

目录 1 电池的基本拓扑 2 已经被淘汰的CTM 3 早已经普及的CTP 4 集成度更高的CTC 5 刚性更好的CTB 1 电池的基本拓扑 相比于燃油车&#xff0c;虽然电动车在结构空间上灵活度更高&#xff0c;空间利用率也更好&#xff0c;但现有条件下无法像燃油车一样快速补能&#xff…...

springboot 项目使用nacos注册中心配置,在windows系统下打jar包后不能启动的一个不好排查的问题

起因&#xff0c;一个项目使用的nacos注册中心配置&#xff0c;想学习运维一些知识&#xff0c;项目在本地idea&#xff0c;无论是run&#xff0c;debug模式&#xff0c;都可以正常运行。就学习如何打包&#xff0c;打包好后&#xff0c;如何运jar包&#xff0c;都启动不起来&a…...

Git撤销指定commit并更新远端仓库

Git撤销指定commit并更新远端仓库 一、撤销指定commit 1.首先执行git log 命令&#xff0c;查看git历史提交以及commit信息&#xff1a; 由于需要脱敏&#xff0c;所以截图可能看得马赛克比较多&#xff0c;需要关注的就是上面的commit后跟的id&#xff0c;以及HEAD当前指定…...

校园约拍微信小程序设计与实现ssm+论文源码调试讲解

4 系统设计 校园约拍微信小程序的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没…...

开源靶场1

我来为您介绍一些知名的开源漏洞靶场平台: DVWA (Damn Vulnerable Web Application) 最流行的 Web 漏洞靶场之一包含 SQL 注入、XSS、文件包含等常见漏洞基于 PHP MySQL适合 Web 安全入门学习 WebGoat OWASP 开源项目基于 Java包含大量 Web 安全漏洞练习提供详细的教程和解…...