初探HarmonyOS开发,ArkTS语言初看

  • 时间:2025-11-17 22:58 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:最近在研究HarmonyOS(鸿蒙操作系统)开发,HarmonyOS(鸿蒙操作系统)想必大家都不陌生了,但是我也是在该系统发布许久后才首次尝试上手开发,由于有写java后台的经验,也算是能堪堪上手。据开发文档来看,目前官方推荐的开发语言为ArkTS语言,ArkTS基于TypeScript(TS)进行了扩展,使得开发者能够利用TypeScript的强类型特性,同时享受HarmonyOS提供的特定功能

最近在研究HarmonyOS(鸿蒙操作系统)开发,HarmonyOS(鸿蒙操作系统)想必大家都不陌生了,但是我也是在该系统发布许久后才首次尝试上手开发,由于有写java后台的经验,也算是能堪堪上手。

据开发文档来看,目前官方推荐的开发语言为ArkTS语言,ArkTS基于TypeScript(TS)进行了扩展,使得开发者能够利用TypeScript的强类型特性,同时享受HarmonyOS提供的特定功能和优化。所以在正式上手前,还需有TypeScript的基础。

TypeScript是一种由微软开发的开源编程语言,它是JavaScript的一个超集,意味着任何有效的JavaScript代码都是有效的TypeScript代码。TypeScript的主要优势包括:
强类型:提供了类型系统,可以在编译时检查类型错误,提高代码的稳定性和可维护性。
面向对象:支持类和接口等面向对象编程特性。
命名空间:有助于组织大型代码库。
装饰器:提供了一种特殊的方式来注释或修改类及其成员。
ES6+ 特性:支持最新的JavaScript语言特性。

根据官方文档来看,ArkTS在TS的基础上做了以下扩展(引自官方文档):

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


初步了解ArkTS背景后,我们来看看ArkTS的基础语法。第一,我们以一个基础示例来说明ArkTS语言的编写结构,如下图,当用户点击Click Me按钮时,文本内容会从“Hello Word”变更为“Hello ArkUI”。

初探HarmonyOS开发,ArkTS语言初看

在上图的这个示例中,ArkTS的代码结构如下:

初探HarmonyOS开发,ArkTS语言初看

大家可以看到,在本示例中的代码结构被分为了几个模块,装饰器、UI描述、组件、方法,下面我们来依依详解每个模块的具体含义:

  • 装饰器:以“@”开头,一般处于类的名称前、变量名称前及方法函数名称前,用于装饰类、结构、方法及变量,并根据开发要求赋予其特殊含义(功能)。如图上所示,@Entry、@Component和@State都是装饰器。
  • UI描述:用以声明式的方法来描述UI结构(处于build()方法内的代码)
  • 自定义组件:可复用的UI单元,可组合其他组件,如上述被Component装饰的struct Hello(按我的理解,ArkTS中的组件是和TS中的函数类似,区别在于TS中的函数是只能进行逻辑操作,而ArkTS中的组件却是可将逻辑、样式(style)、排版(HTML)集合在一起成为一模块使用)
  • 系统组件:ArkUI框架中默认内置的基础和容器组件,可直接被开发者调用的组件(函数),列如示例中的Column、Text、Divider、Button。
  • 属性方法:组件可以通过链式调用配置多项属性,如fontSize()、width()、height()、backgroundColor()等。
  • 事件方法:组件可以通过链式调用设置多个事件的响应逻辑,如跟随在Button后面的onClick()。

声明式UI描述:

根据官方文档说明,ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法。根据组件使用场景及构造方式的不同,组件有有参数和无参数两种类型,而在ArkTS中,创建组件时不需要使用new关键字

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

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


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

1、Image组件的必选参数src:

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

2、Text组件的非必选参数content。

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

3、变量或表达式也可以用于参数赋值,其中表达式返回的结果类型必须满足参数类型要求。例如,设置变量或表达式来构造Image和Text组件的参数。

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


属性配置:

与正常CSS的Style表配置不同,ArkTS的样式配置及其他属性均使用“.”进行链式调用。

1、配置Text组件的字体大小:

Text('test')
  .fontSize(12)

2、配置组件的多个属性:

Image('test.jpg')
  .alt('error.jpg')    
  .width(100)    
  .height(100)

3、除了直接传递常量参数外,还可以传递变量或表达式:

Text('hello')
  .fontSize(this.size)
Image('test.jpg')
  .width(this.count % 2 === 0 ? 100 : 200)    
  .height(this.offset + 100)

4、对于系统组件,ArkUI还为其属性预定义了一些枚举类型供开发者调用,枚举类型可以作为参数传递,但必须满足参数类型要求。例如,可以按以下方式配置Text组件的颜色和字体样式:

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


配置事件:

与Javascript一样,ArkTS的事件方法以“.”链式调用的方式配置系统组件支持的事件。

1、使用箭头函数配置组件的事件方法。

Button('Click me')
  .onClick(() => {
this.myText = 'ArkUI';
  })

2、使用匿名函数表达式配置组件的事件方法,要求使用bind,以确保函数体中的this指向当前组件。

Button('add counter')
  .onClick(function(){
this.counter += 2;
  }.bind(this))

3、使用组件的成员函数配置组件的事件方法。

myClickHandler(): void {
this.counter += 2;
}
...
Button('add counter')
  .onClick(this.myClickHandler.bind(this))

4、使用声明的箭头函数,可以直接调用,不需要bind this。

fn = () => {
console.info(`counter: ${this.counter}`)
this.counter++
}
...
Button('add counter')
  .onClick(this.fn)


配置子组件:

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

1、简单的Column组件配置子组件的示例。

Column() {
  Text('Hello')
    .fontSize(100)
  Divider()
  Text(this.myText)
    .fontSize(100)
    .fontColor(Color.Red)
}

2、容器组件均支持子组件配置,可以实现相对复杂的多级嵌套。

Column() {
  Row() {
    Image('test1.jpg')
      .width(100)
      .height(100)
    Button('click +1')
      .onClick(() => {
        console.info('+1 clicked!');
      })
  }
}


-END-

我是阿杰,祝你幸福没烦恼,哦耶~

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】Oracle 表分区在线重定义(2025-11-18 00:02)
【系统环境|】Oracle 删除大量表记录操作总结(2025-11-18 00:02)
【系统环境|】2022年学C++开发好比49年入国军,真的没什么公司在用C++了吗?(2025-11-18 00:01)
【系统环境|】核医学专业名词索引(X-Z)(2025-11-18 00:01)
【系统环境|】大手牵小手,我们一起去看世界~~~~普吉7天6晚亲子游(2025-11-18 00:00)
【系统环境|】显微镜下的质量控制(2025-11-18 00:00)
【系统环境|】Python代码如何变成双击就能运行的程序(2025-11-17 23:59)
【系统环境|】Python,pyttsx3,实现语音合成,实现语音朗读,文字转语音(2025-11-17 23:59)
【系统环境|】用Python为PDF文档添加印章:自动化你的数字工作流(2025-11-17 23:58)
【系统环境|】再见 Swagger!国人开源了一款超好用的 API 文档生成框架真香(2025-11-17 23:58)
手机二维码手机访问领取大礼包
返回顶部