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

HarmonyOS应用开发学习-ArkTs声明式UI描述

ArkTs声明式UI描述

1 创建组件

声明式UI描述

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

创建组件

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

无参数

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

Column() {//文字组件  无参数Text()//分割线组件  无参数Divider()
}

有参数

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

  • Image组件的必选参数src。
 //图片组件,必须要参数,否则报错
Image('https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png')
  • Text组件的非必选参数content。
//文字组件  有参数
Text('HELLO') 
  • 变量或表达式也可以用于参数赋值,其中表达式返回的结果类型必须满足参数类型要求。

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

@Entry
@Component
struct Index { @State title:string ="你好!";img_src:string= 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png';public p:string ='p'; //公共的private n:number=10; //私有的protected flag:boolean = true; //受保护的//UI描述build() {Row() {//容器组件:水平方向布局容器Column() {//容器组件:垂直方向布局容器Text(`${this.title}${this.n}`);Image(this.img_src);}.width('100%')}.height('100%')}
}

2 配置属性

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

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

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

Text('he11o')
.fontsize(20)
.fontcolor(color.Red)//枚举类型定义颜色
.fontweight(fontweight.Bo1d)//枚举类型加粗

3 配置事件

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

  • 使用箭头函数配置组件的事件方法。
Button('click me')//箭头函数配置事件,点击按钮改变title变量的值.onClick(()=>{this.title = '按钮点击了'})
  • 使用匿名函数表达式配置组件的事件方法,要求使用bind,以确保函数体中的this指向当前组件
Button('click me')// 普通函数配置事件,this指向不对会直接写报错,所以需要设置bind属性.onClick(function(){this.title = "标题点击"}.bind(this))

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

普通函数

//函数的定义myHandler():void{this.title = "myHandler"}
...
.onClick(this.myHandler.bind(this))

箭头函数

//函数的定义
myHandler2 = ():void=>{this.title = "myHandler2"}
...
.onClick(this.myHandler2)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《框架封装 · 优雅接口限流方案》
  • 第R2周:Pytorch实现:LSTM-火灾温度预测
  • 20240812软考架构-------软考36-40答案解析
  • Haproxy知识点
  • sp eric靶机渗透测试
  • 【学习笔记】Day 13
  • RuoYi-Vue新建模块
  • 复杂SQL查询案例分析:计算每个月的累积唯一用户数
  • LVS详解
  • 【已解决】AttributeError: ‘diet’ object has no attribute ‘has_key’
  • 前端性能优化方法
  • 快速拷贝复制工具软件@拷贝工具@多线程拷贝@robocopy
  • 视频汇聚平台智能边缘分析一体机分析平台摄像头异常位移算法识别检测
  • 串行通信协议--CAN(Controller Area Network Bus,控制器局域网总线)
  • Python 异步编程:Sqlalchemy 异步实现方式
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CSS实用技巧干货
  • ECMAScript6(0):ES6简明参考手册
  • FastReport在线报表设计器工作原理
  • HTML-表单
  • iOS 系统授权开发
  • JS函数式编程 数组部分风格 ES6版
  • laravel 用artisan创建自己的模板
  • Redis 懒删除(lazy free)简史
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Sublime text 3 3103 注册码
  • windows下使用nginx调试简介
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 解析 Webpack中import、require、按需加载的执行过程
  • 三分钟教你同步 Visual Studio Code 设置
  • 手写一个CommonJS打包工具(一)
  • 为什么要用IPython/Jupyter?
  • MPAndroidChart 教程:Y轴 YAxis
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​人工智能书单(数学基础篇)
  • # Apache SeaTunnel 究竟是什么?
  • #etcd#安装时出错
  • #HarmonyOS:Web组件的使用
  • #laravel 通过手动安装依赖PHPExcel#
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • $L^p$ 调和函数恒为零
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (day 12)JavaScript学习笔记(数组3)
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Java入门)抽象类,接口,内部类
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (新)网络工程师考点串讲与真题详解
  • (转)ObjectiveC 深浅拷贝学习
  • (转)甲方乙方——赵民谈找工作
  • ***通过什么方式***网吧