自学鸿蒙HarmonyOS的ArkTS语言<一>基本语法

news2025/1/15 20:47:58
一、一个ArkTs的目录结构

在这里插入图片描述

二、一个页面的结构

在这里插入图片描述

A、装饰器

@Entry 装饰器 : 标记组件为入口组件,一个页面由多个自定义组件组成,但是只能有一个组件被标记
@Component : 自定义组件, 仅能装饰struct关键字声明的数据结构
@State:组件中的状态变量,就是ui绑定的数据,状态变量变化,ui中绑定的也会变

B、UI描述

整个build里面的,以声明式的方式来描述UI的结构,跟平常写的标签式的区别挺大
1)系统组件用的时候后面跟(), 分为有参数和无参数

Column() {
  Text('item 1') // 参数可选
  Text(`count: ${this.count}`) // 用变量赋值
  Divider()
  Image('https://xyz/test.jpg') // 参数必填
  
}

2)css和事件都是以链式的方式挂在系统组件后面,每个单独一行(css可以做成函数式的,可复用,还没细看)

Text('test')
  .fontSize(12) // 属性参数为常量
Text('hello')
  .fontSize(this.size) // 属性参数为变量赋值或者表达式
  .fontColor(Color.Red) // 属性参数为可调用的枚举类型
  .fontWeight(FontWeight.Bold)

3)事件

// 形式1:
Button('Click me')
  .onClick(() => {  // 箭头函数
     // do sth
  })
// 形式2:
Button('add counter')
  .onClick(function(){ // 匿名函数表达式
    // do sth
  }.bind(this))  // 必须用bind, 确保函数体中this指向当前组件
// 形式3:
myClickHandler(): void {
   // do sth
}
...
Button('add counter')
  .onClick(this.myClickHandler.bind(this)) // 组件的成员函数
// 形式4:
fn = () => {
  // do sth
}
...
Button('add counter')
  .onClick(this.fn) // 声明的箭头函数,不需要bind this

4)布局有专门的系统组件,比如Column组件,Row组件、Flex组件、Grid组件, 这些都是容器组件,可以嵌套子组件

4)UI描述里面可以有自定义组件

C、自定义组件

可复用,可组合,数据驱动UI更新

  1. 结构
@Component
struct  组件名称 { // 组件名称用大驼峰
    @State  变量名称: 变量类型 = 变量值
	build() {
    	// ui声明
    }
}
  • struct: 实例化,可以省略new
  • struct被@Component装饰后具备组件化的能力
  • 一个struct只能被一个@Component装饰,如果一个自定义组件设置为页面,必须用@Entry 装饰
  1. 成员函数/变量
  • 自定义组件的成员函数为私有的,且不建议声明成静态函数
  • 自定义组件的成员变量本地初始化有些是可选的,有些是必选的。 – 涉及到传参
  1. build()函数
  • @Entry装饰的自定义组件,其build()函数下的根节点唯一且必要,且必须为容器组件,其中ForEach禁止作为根节点。
  • @Component装饰的自定义组件,其build()函数下的根节点唯一且必要,可以为非容器组件,其中ForEach禁止作为根节点。
  • 自定义组件通用样式
@Entry
@Component
struct MyComponent {
  build() {
    Row() {
      MyComponent()
        .width(200) // 这里的样式并不是直接加在MyComponent里面的根组件上的,而是根组件外部一个不可见的容器组件上的
        .height(300)
        .backgroundColor(Color.Red)
    }
  }
}
  • 不允许做的
@Component
struct MyComponent{
	doSomeCalculations() {
	  }
	
	  calcTextValue(): string {
	    return 'Hello World';
	  }
	
	  @Builder doSomeRender() {
	    Text(`Hello World`)
	  }
	build() {
	  // 不允许声明本地变量
	  let a: number = 1; 
	  // 不允许在UI描述里直接使用console.info,但允许在方法或者函数里使用
	  console.info('print debug log'); 
	  // 不允许创建本地的作用域
	  {
	    ...
	  }
	  // 不允许调用没有用@Builder装饰的方法,允许系统组件的参数是TS方法的返回值
	  this.doSomeCalculations();
	  // 可以调用@Builder装饰的方法
	  this.doSomeRender()
	  // 允许系统组件的参数是TS方法的返回值
	  Text(this.calcTextValue())
	  // 不允许switch语法,如果需要使用条件判断,请使用if
	  switch (expression) {
	      case 1:
	        Text('...')
	        break;
	      case 2:
	        Image('...')
	        break;
	      default:
	        Text('...')
	        break;
	    }
      // 不允许使用表达式
     (this.aVar > 10) ? Text('...') : Image('...')
   }
}

  1. 被外部引用的自定义组件,需要使用export导出
@Component
exprot struct  组件名称 {
 	private message: string= '123'
	build() {
    	// ui声明
    }
}
  1. 使用自定义组件的地方用import引入
import { 组件名 } from '相对路径'
@Entry
@Component
struct ParentComponent {
  build() {
    Column() {
      Text('ArkUI message')
      组件名({ message: 'Hello, World!' }) // 传参,对象形式
      Divider()
      组件名({ message: '你好!' });
    }
  }
}

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

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

相关文章

Python抓取天气信息

Python的详细学习还是需要些时间的。如果有其他语言经验的,可以暂时跟着我来写一个简单的例子。 2024年最新python教程全套,学完即可进大厂!(附全套视频 下载) (qq.com) 我们计划抓取的数据:杭州的天气信息…

行列式和矩阵的区别

目录 一、行列式 1. 行列式的定义 2. (全)排列 3. 逆序数 二、矩阵 1. 矩阵的定义 三、行列式和矩阵的区别 四、参考书目 一、行列式 1. 行列式的定义 2. (全)排列 3. 逆序数 二、矩阵 1. 矩阵的定义 三、行列式和矩阵的区别 四、参考书目 同济大学数学系. 工程数学…

破除“数据孤岛”新策略:Data Fabric(数据编织)和逻辑数据平台

今天,我们已经进入到一个数据爆发的时代,仅 2022 年,我国数据产量就高达 8.1ZB,同比增长 22.7%,数据产量位居世界第二。数据作为新型生产资料,是企业数智化运营的基础,已快速融入到生产、分配、…

什么是数仓调度?推荐使用这款数据仓库ETL工具

随着企业数据规模的不断增大,如何高效地管理和利用数据成为了企业数字化转型过程中的重要问题。数据仓库作为一种专门用于存储和处理企业数据的技术,已经成为了企业数字化转型过程中不可或缺的一部分。而数仓调度则是数据仓库建设过程中至关重要的一环。…

搭建个人官网时如何配置SMTP邮件自动发送

什么是 SMTP? SMTP( Simple Mail Transfer Protocol ) 是一种简单邮件传输协议,可以在互联网上通过SMTP来发送电子邮件,是建模在 FTP 文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。SMTP 服…

如何准备大模型面试:迈向成功职业道路的关键一步

前言 在当今日新月异的科技领域中,大模型技术正以其卓越的智能和无限的可能性,吸引着越来越多的企业和求职者。面对大模型领域的职位面试,如何充分准备,展现自己的专业能力和潜力,成为了每位求职者关注的焦点。本文将…

【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别

目录 写在开头 一、CNN的原理 1. 概述 2. 卷积层 内参数(卷积核本身) 外参数(填充和步幅) 输入与输出的尺寸关系 3. 多通道问题 多通道输入 多通道输出 4. 池化层 平均汇聚 最大值汇聚 二、手写数字识别 1. 任务…

原生js制作svg 图标生成动态 tab栏切换效果(结尾附代码)

svg 图标生成动态 tab 栏 先看效果: 我想做一个 tab 栏比较美观的效果,当然切换的数据可以自己做一下,这里不演示,说一下特效如何制作。 当我点击时要将空心变为实心的这么一个效果,所以准备两个五角星样式一个是空…

【索引】数据库索引之顺序索引概述

目录 1、索引的基本概念 2、顺序索引 3、稠密索引和稀疏索引 3.1 什么是稠密索引? 3.2 什么是稀疏索引? 4、索引的更新 4.1 索引的插入操作 4.1 索引的删除操作 5、辅助索引 1、索引的基本概念 数据库中的索引与图书馆中书的索引作用相同&#xf…

解锁TikTok内容趋势——高效获取TikTok标签信息接口

一、引言 在TikTok这个全球热门的短视频平台上,标签(Hashtags)是用户和内容创作者连接、发现新内容的重要工具。为了帮助品牌、市场分析师、内容创作者等更好地理解和利用TikTok上的内容趋势,我们推出了一款全新的接口服务&#…

OPenCV实现把人形轮廓画在实时视频画面中

操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 1.功能描述 当你从摄像头读取实时视频时,如果想在视频的画面中画一个方框,或者是画一个圆,是很简单的事情,可是…

硬盘格式化NTFS好还是exFAT好 U盘存储文件用哪个格式好? 硬盘用exfat还是ntfs mac不能读取移动硬盘怎么解决

在计算机世界中,文件系统是数据管理的基石,而NTFS和exFAT无疑是这块基石上的两大巨头。它们各自拥有独特的特点和优势,并在不同的使用场景中发挥着重要作用。 什么是文件系统 文件系统提供了组织驱动器的方法。它规定了如何在驱动器上存储数…

Boost 网络库

asio 网络编程的基本流程创建 socket绑定acceptor连接指定的端点服务器接受连接 网络编程的基本流程 服务端 1)socket----创建socket对象。 2)bind----绑定本机ipport。 3)listen----监听来电,若在监听到来电,则建…

如何做好媒体邀约宣发

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 如何做好媒体邀约:7个步骤,3个注意点,1个提醒。 一,媒体邀约七步走 明确活动的目的:首先,明确媒体邀约宣发的目标…

深度 | OpenAI COO闭门访谈:大模型已至,企业如何落地?

图片来源:OpenAI Z Highlights: 仅仅允许公司单一部门使用互联网非常可笑。类似地,给所有员工开放AI权限将会是最大的催化剂。当前阶段的AI企业级部署,要让员工熟悉AI工具的使用方式,让他们将工作流程与模型的功能紧密…

每天写java到期末考试(6.19)--1.百元买百鸡

好久没有写了,现在赶快先复习复习,哈哈,加油! 收获:写了好久,才写好这一个问题,提示自己不要好高骛远,前期先踏踏实实写好每一个代码; 被困住原因 取余%与整除/区别 pa…

GaussDB技术解读——GaussDB架构介绍(五)

GaussDB架构介绍(四)从云原生关键技术架构&关键技术方案两方面对GaussDB云原生架构进行了解读,本篇将从关键技术方案的事务存储组件、SQL引擎组件、DCS组件、实时分析组件等方面继续介绍GaussDB云原生架构。 目录 事务存储组件 1、本地…

openh264 Pskip 模式决策原理:WelsMdPSkipEnc 函数

WelsMdPSkipEnc函数介绍 函数功能:它尝试对当前宏块(MB)进行P-skip模式的编码,并返回一个布尔值表示是否成功。函数参数: 函数接受编码上下文 pEncCtxMD结构体 pWelsMd当前宏块 pCurMb宏块缓存 pMbCache 函数调用关系…

人生的乐趣,在于对真知的追求

子曰:朝闻道,夕死可矣! 孔子说:早上听到关于世界的真理,哪怕晚上就die了都可以。 这句话很有力量而经常被人引用,表达出我们如何看待沉重的肉身和精神世界。 我们的生活目的:道。 —— 要了解…

五种HTTP数据传输方式

在前端开发过程中,后端主要提供 http 接口来传输数据,而这种数据传输方式主要有五种: url paramqueryform-urlencodedform-datajson 下面就让我们一起来了解一下在Nest.js中如何使用这五种HTTP数据传输方式: 一,创建项目 使用nest new 创建一个nest的项目 nest new 项目名称 …