HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 一)

news2024/12/24 9:04:49

初识ArkTS语言

ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语言开发能力。

当前,ArkTSTS的基础上主要扩展了如下能力:

  • 基本语法:ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,再配合ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共同构成了UI开发的主体。
  • 状态管理:ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。另外,从数据的传递形式来看,可分为只读的单向传递和可变更的双向传递。开发者可以灵活的利用这些能力来实现数据和UI的联动。
  • 渲染控制:ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,渲染对应状态下的UI内容。循环渲染可从数据源中迭代获取数据,并在每次迭代过程中创建相应的组件。数据懒加载从数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。

未来,ArkTS会结合应用开发/运行的需求持续演进,逐步提供并行和并发能力增强、系统类型增强、分布式开发范式等更多特性。

基本语法概述

在初步了解了ArkTS语言之后,我们以一个具体的示例来说明ArkTS的基本组成。如下图所示,当开发者点击按钮时,文本内容从“Hello World”变为“Hello ArkUI”。

图1 示例效果图

 

本示例中,ArkTS的基本组成如下所示。

ArkTS的基本组成

  • 装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中@Entry@Component@State都是装饰器,@Component表示自定义组件,@Entry表示该自定义组件为入口组件,@State表示组件中的状态变量,状态变量变化会触发UI刷新。
  • UI描述:以声明式的方式来描述UI的结构,例如build()方法中的代码块。
  • 自定义组件:可复用的UI单元,可组合其他组件,如上述被@Component装饰的struct Hello
  • 系统组件:ArkUI框架中默认内置的基础和容器组件,可直接被开发者调用,比如示例中的ColumnTextDividerButton
  • 属性方法:组件可以通过链式调用配置多项属性,如fontSize()width()height()backgroundColor()等。
  • 事件方法:组件可以通过链式调用设置多个事件的响应逻辑,如跟随在Button后面的onClick()

除此之外,ArkTS扩展了多种语法范式来使开发更加便捷:

  • @Builder/@BuilderParam:特殊的封装UI描述的方法,细粒度的封装和复用UI描述。
  • @Extend/@Style:扩展内置组件和封装属性样式,更灵活地组合内置组件。
  • stateStyles:多态样式,可以依据组件的内部状态的不同,设置不同样式。

声明式UI描述

ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。

创建组件

根据组件构造方法的不同,创建组件包含有参数和无参数两种方式。

无参数

如果组件的接口定义没有包含必选构造参数,则组件后面的“()”不需要配置任何内容。例如,Divider组件不包含构造参数:

Column() {
  Text('item 1')
  Divider()
  Text('item 2')
}

有参数

如果组件的接口定义包含构造参数,则在组件后面的“()”配置相应参数。

  • Image组件的必选参数src。
Image('https://xyz/test.jpg')
  • Text组件的非必选参数content。
// string类型的参数
Text('test')
// $r形式引入应用资源,可应用于多语言场景
Text($r('app.string.title_value'))
// 无参数形式
Text()
  • 变量或表达式也可以用于参数赋值,其中表达式返回的结果类型必须满足参数类型要求。

例如,设置变量或表达式来构造Image和Text组件的参数。

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

配置属性

属性方法以“.”链式调用的方式配置系统组件的样式和其他属性,建议每个属性方法单独写一行。

  • 配置Text组件的字体大小。
Text('test')
  .fontSize(12)
  • 配置组件的多个属性。
Image('test.jpg')
  .alt('error.jpg')    
  .width(100)    
  .height(100)
  • 除了直接传递常量参数外,还可以传递变量或表达式。
Text('hello')
  .fontSize(this.size)
Image('test.jpg')
  .width(this.count % 2 === 0 ? 100 : 200)    
  .height(this.offset + 100)
  • 对于系统组件,ArkUI还为其属性预定义了一些枚举类型供开发者调用,枚举类型可以作为参数传递,但必须满足参数类型要求。

例如,可以按以下方式配置Text组件的颜色和字体样式。

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

配置事件

事件方法以“.”链式调用的方式配置系统组件支持的事件,建议每个事件方法单独写一行。

  • 使用lambda表达式配置组件的事件方法。

Button('Click me')
  .onClick(() => {
    this.myText = 'ArkUI';
  })
  • 使用匿名函数表达式配置组件的事件方法,要求使用bind,以确保函数体中的this指向当前组件。
Button('add counter')
  .onClick(function(){
    this.counter += 2;
  }.bind(this))
  • 使用组件的成员函数配置组件的事件方法。
myClickHandler(): void {
  this.counter += 2;
}
...
Button('add counter')
  .onClick(this.myClickHandler.bind(this))

配置子组件

如果组件支持子组件配置,则需在尾随闭包"{...}"中为组件添加子组件的UI描述。Column、Row、Stack、Grid、List等组件都是容器组件。

  • 以下是简单的Column组件配置子组件的示例。

Column() {
  Text('Hello')
    .fontSize(100)
  Divider()
  Text(this.myText)
    .fontSize(100)
    .fontColor(Color.Red)
}
  • 容器组件均支持子组件配置,可以实现相对复杂的多级嵌套。
Column() {
  Row() {
    Image('test1.jpg')
      .width(100)
      .height(100)
    Button('click +1')
      .onClick(() => {
        console.info('+1 clicked!');
      })
  }
}

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

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

相关文章

TJUACM假期集训个人赛(九)(cf1453a-d cf1440a-c)

今天最后一场个人赛 出题玩抽象的 密码是 l a s t d a n c e lastdance lastdance 然后题名连起来是个人赛的最后一舞 最抽象的我觉得还是一套题出三道大模拟,人写没了 寻思最后一场好好打拿个 r k 1 rk1 rk1,最后十分钟被超了,三周个人赛没…

【MATLAB第56期】#源码分享 | 基于MATLAB的机器学习算法单输入多输出分类预测模型思路(回归改分类)

【MATLAB第56期】#源码分享 | 基于MATLAB的机器学习算法单输入多输出分类预测模型思路(回归改分类) 针对单输入多输出分类预测,可采用回归的方式进行预测。 本文采用BP神经网络进行演示。 一、导入数据 数据为1输入,5输出&#…

短视频矩阵系统源码--开发实践

短视频矩阵系统源码开发技术: 1. 数据采集:使用Python的requests库进行数据爬取,使用Selenium模拟浏览器操作,解决抖音反爬虫机制。 2. 数据处理:使用Python的正则表达式、BeautifulSoup等库进行数据处理。 3. 关键…

C#开发的OpenRA游戏之变卖按钮

前面已经分析右边创建窗口的功能,当玩家建造了很多物品,由于某种原因,需要把建造的物品进行变卖掉,需要回收一些金币,以便建造更多攻击的力量。 从上图可以看到在顶端有四个按钮,第一个金钱的符号,就是变卖物品的按钮;第二个是维修的按钮;第三个是放置信号标记,以便盟…

云计算的学习(五)

五、虚拟化特性介绍 1.集群特性 1.1HA HA(Hith Available,高可用特性),克服单台主机的局限性,当一台服务器损坏,运行在损坏服务器上的虚拟机会自动迁移到其他运行状态正常的服务器上,整个迁移过程用户无感…

举例说明什么是基于线性回归的单层神经网络

基于线性回归的单层神经网络是一种简单的神经网络,通常用于解决回归问题。这种神经网络只包含一个输入层和一个输出层,没有隐藏层。我们可以通过求解权重和偏置项来拟合输入和输出之间的线性关系。 例如,给定一个数据集,其中包含了…

内网环境使用docker部署微服务系统记录

背景 内网环境部署一套微服务应用系统,采用docker方式部署。包括mysql、redis、nginx、nacos、gateway以及应用程序的jar包。下面记录部署的过程和遇到的问题。 一、内网dockcer部署mysql服务 内网生成mysql镜像 在一个可以连接外网的环境中,下载mys…

数据库压力测试方法小结

一、前言 在前面的压力测试过程中,主要关注的是对接口以及服务器硬件性能进行压力测试,评估请求接口和硬件性能对服务的影响。但是对于多数Web应用来说,整个系统的瓶颈在于数据库。 原因很简单:Web应用中的其他因素,…

端口操作指南

知行之桥 EDI 系统中的端口是用于创建数据工作流的功能模块。每个端口可执行以下的一个任务: 使用标准网络协议 (AS2,AS4,FTP,SFTP,OFTP 等)与外部目标之间传输文件与后端系统集成,例如数据库或云端应用程序使用或公开…

抖音seo源码搭建---PHP,vue jquery layui

抖音seo源码,抖音seo矩阵系统源码技术搭建,抖音seo源码技术开发思路梳理搭建 开发思路:抖音seo系统,抖音seo矩阵系统底层框架上支持了ai视频混剪,视频产出,视频AI制作,多账号多平台矩阵&#x…

Python实现Excel文件拷贝图片到另一个的Excel文件(保持原有图片比例)

Python实现Excel文件拷贝图片到另一个的Excel文件(保持原有图片比例) 1、前言1.1 成功拷贝但是比例错误1.2 直接报错 2、解决办法3、号外 1、前言 今天朋友给我一个需求,需要把xlsx文件中的图片拷贝到另一个xlsx中,但是试过网上比…

Git超级详细使用

一、概述 1.1 、git工作流程 命令如下: 1. clone (克隆):从远程仓库中克隆代码到本地仓库 2. checkout(检出) :从本地仓库中检出一个仓库分支然后进行修订add (添加):在提交前先将代码提交到暂存区 3. commit(提交)︰提交到本地仓库。本地仓库中保存修…

“管理Layui树形图,提高页面交互性与可视化效果“

标题:管理Layui树形图,提高页面交互性与可视化效果 Layui树形图简介一、引入Layui和jQuery库:二、HTML结构准备:三、初始化树形图:四、配置树形图的其他属性和事件:4.1 实体类4.2 PermissionDao方法4.3 Per…

【crash】浮点除0堆损坏

摘要:工作中遇到一个crash,其现象真实的crash原因差别比较大,和我自身原本了解的只是冲突,因此在本片文档中简单描述下。关键字:除0、IEEE754 1 前情提要 QA测试过程发现一个比较奇怪的crash,只会在特定机…

python爬虫-获取headers(报文头)关键参数实例小记

注意!!!!某XX网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!! 第一步:请求页面,得到响应。建议首次请求时headers内容都带着,调试…

OpenCV入坑第一天:图像的基础操作

我们都知道,OpenCV能够帮助我们处理视频和图像,咱们在图像处理中,除了Pillow库之外,最经常用到的也是它了。那么现在咱们就正式入坑OpenCV for Python,一起来感受一下OpenCV的魅力吧! 文章目录 读取图像 im…

GAMES101笔记 Lecture11 Geometry 2(Curces and Surfaces)

目录 Explicit Representations in Computer Graphics(计算机图形学中的显式几何表示)Point Cloud(点云)Polygon Mesh(多边形网格)The Wavefront Object File(.obj) Format(OBJ格式文件) Curves(曲线)Bezier Curves(贝塞尔曲线)Defining Cubic Bezier Curve With Tangents(定义…

el-checkbox和el-switch绑定一个Number值

因为我们对状态这种字段,后端一般返回的是Number值。0为正常,1为停用。 el-switch,el-checkbox这种控件呢,一般是绑定布尔值的。原来我的做法是使用value和change事件来做转换,而不是v-model。但是后来发现&#xff0c…

row_number 和 cte 使用实例:按照队列进行数据抵消

row_number 和 cte 使用实例:按照队列进行数据抵消 问题来源模拟数据使用 cte使用sum结合开窗函数结合 row_number 最终实现完整的模拟代码小结问题来源 今天无聊的翻了翻以前的论坛的帖子。。。嗯,想把一些没有什么价值的消息记录给删除掉,就是那些专家分获取记录。 毕竟,…

二次元少女-InsCode Stable Diffusion 美图活动一期

一、 Stable Diffusion 模型在线使用地址: https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型相关版本和参数配置: 模型版本:chilloutmix_NiPrunedFp32Fix.safetensors 采样方法(Sampler)Sampling method:DPM SDE …