前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 构建用户界面(一)

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 构建用户界面(一)

作者头像
枫叶丹
发布于 2025-02-02 13:25:56
发布于 2025-02-02 13:25:56
8300
代码可运行
举报
文章被收录于专栏:C++C++
运行总次数:0
代码可运行

1 -> 组件介绍

组件(Component)是构建页面的核心,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。组件之间相互独立,随取随用,也可以在需求相同的地方重复使用。

1.1 -> 组件分类

根据组件的功能,可以分为以下六大类:

组件类型

主要组件

容器组件

badge、dialog、div、form、list、list-item、list-item-group、panel、popup、refresh、stack、stepper、stepper-item、swiper、tabs、tab-bar、tab-content

基础组件

button、chart、divider、image、image-animator、input、label、marquee、menu、option、picker、picker-view、piece、progress、qrcode、rating、richtext、search、select、slider、span、switch、text、textarea、toolbar、toolbar-item、toggle

媒体组件

video

画布组件

canvas

栅格组件

grid-container、grid-row、grid-col

svg组件

svg、rect、circle、ellipse、path、line、polyline、polygon、text、tspan、textPath、animate、animateMotion、animateTransform

2 -> 布局说明

设备的基准宽度为720px(px为逻辑像素,非物理像素),实际显示效果会根据实际屏幕宽度进行缩放。

其换算关系如下:

组件的width设为100px时,在宽度为720物理像素的屏幕上,实际显示为100物理像素;在宽度为1440物理像素的屏幕上,实际显示为200物理像素。

一个页面的基本元素包含标题区域、文本区域、图片区域等,每个基本元素内还可以包含多个子元素,根据需求还可以添加按钮、开关、进度条等组件。在构建页面布局时,需要对每个基本元素思考以下几个问题:

  • 该元素的尺寸和排列位置
  • 是否有重叠的元素
  • 是否需要设置对齐、内间距或者边界
  • 是否包含子元素及其排列位置
  • 是否需要容器组件及其类型

将页面中的元素分解之后再对每个基本元素按顺序实现,可以减少多层嵌套造成的视觉混乱和逻辑混乱,提高代码的可读性,方便对页面做后续的调整。以下图为例进行分解:

图1 页面布局分解

图2 留言区布局分解

3 -> 添加标题行和文本区域

实现标题和文本区域最常用的是基础组件text。text组件用于展示文本,可以设置不同的属性和样式,文本内容需要写在标签内容区。在页面中插入标题和文本区域的示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- test.hml -->
<div class="container">
  <text class="title-text">{
  
  {headTitle}}</text>
  <text class="paragraph-text">{
  
  {paragraphFirst}}</text>
  <text class="paragraph-text">{
  
  {paragraphSecond}}</text>
</div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* test.css */
.container {
  flex-direction: column;
  margin-top: 20px;
  margin-left: 30px;
}
.title-text {
  color: #1a1a1a;
  font-size: 50px;
  margin-top: 40px;
  margin-bottom: 20px;
}
.paragraph-text {
  color: #000000;
  font-size: 35px;
  line-height: 60px;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// test.js
export default {
  data: {
    headTitle: 'Capture the Beauty in This Moment',
    paragraphFirst: 'Capture the beauty of light during the transition and fusion of ice and water. At the instant of movement and stillness, softness and rigidity, force and beauty, condensing moving moments.',
    paragraphSecond: 'Reflecting the purity of nature, the innovative design upgrades your visual entertainment and ergonomic comfort. Effortlessly capture what you see and let it speak for what you feel.',
  },
}

4 -> 添加图片区域

添加图片区域通常用image组件来实现,使用的方法和text组件类似。

图片资源建议放在jsdefaultcommon目录下,common目录需自行创建。代码示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- test.hml -->
<image class="img" src="{
  
  {middleImage}}"></image>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* test.css */
.img {  
  margin-top: 30px;
  margin-bottom: 30px;
  height: 385px;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// test.js
export default {
  data: {
    middleImage: '/common/ice.png',
  },
}

5 -> 添加留言区域

留言框的功能为:用户输入留言后点击完成,留言区域即显示留言内容;用户点击右侧的删除按钮可删除当前留言内容并重新输入。

留言区域由div、text、input关联click事件实现。开发者可以使用input组件实现输入留言的部分,使用text组件实现留言完成部分,使用commentText的状态标记此时显示的组件(通过if属性控制)。在包含文本完成和删除的text组件中关联click事件,更新commentText状态和inputValue的内容。具体的实现示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- test.hml -->
<div class="container">
  <text class="comment-title">Comment</text>
  <div if="{
  
  {!commentText}}">
    <input class="comment" value="{
  
  {inputValue}}" onchange="updateValue()"></input>
    <text class="comment-key" onclick="update" focusable="true">Done</text>
  </div>
  <div if="{
  
  {commentText}}">
    <text class="comment-text" focusable="true">{
  
  {inputValue}}</text>
    <text class="comment-key" onclick="update" focusable="true">Delete</text>
  </div>
</div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* test.css */
.container {
  margin-top: 24px;
  background-color: #ffffff;
}
.comment-title {
  font-size: 40px;
  color: #1a1a1a;
  font-weight: bold;
  margin-top: 40px;
  margin-bottom: 10px;
}
.comment {
  width: 550px;
  height: 100px;
  background-color: lightgrey;
}
.comment-key {
  width: 150px;
  height: 100px;
  margin-left: 20px;
  font-size: 32px;
  color: #1a1a1a;
  font-weight: bold;
}
.comment-key:focus {
  color: #007dff;
}
.comment-text {
  width: 550px;
  height: 100px;
  text-align: left;
  line-height: 35px;
  font-size: 30px;
  color: #000000;
  border-bottom-color: #bcbcbc;
  border-bottom-width: 0.5px;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// test.js
export default {
  data: {
    inputValue: '',
    commentText: false,
  },
  update() {
    this.commentText = !this.commentText;
  },
  updateValue(e) {
    this.inputValue = e.text;
  },
}

6 -> 添加组件

要将页面的基本元素组装在一起,需要使用容器组件。在页面布局中常用到三种容器组件,分别是div、list和tabs。在页面结构相对简单时,可以直接用div作为容器,因为div作为单纯的布局容器,可以支持多种子组件,使用起来更为方便。

6.1 -> List组件

当页面结构较为复杂时,如果使用div循环渲染,容易出现卡顿,因此推荐使用list组件代替div组件实现长列表布局,从而实现更加流畅的列表滚动体验。需要注意的是,list仅支持list-item作为子组件,具体的使用示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- test.hml -->
<list class="list">
  <list-item type="listItem" for="{
  
  {textList}}">
    <text class="desc-text">{
  
  {$item.value}}</text>
  </list-item>
</list>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* test.css */
.desc-text {
  width: 683.3px;
  font-size: 35.4px;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// test.js
export default {
  data: {
    textList:  [{value: 'JS FA'}],
  },
}

为避免示例代码过长,以上示例的list中只包含一个list-item,list-item中只有一个text组件。在实际应用中可以在list中加入多个list-item,同时list-item下可以包含多个其他子组件。

6.2 -> Tabs组件

当页面经常需要动态加载时,推荐使用tabs组件。tabs组件支持change事件,在页签切换后触发。tabs组件仅支持一个tab-bar和一个tab-content。具体的使用示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- test.hml -->
<tabs>
  <tab-bar>
    <text>Home</text>
    <text>Index</text>
    <text>Detail</text>
  </tab-bar>
  <tab-content>
    <image src="{
  
  {homeImage}}"></image>
    <image src="{
  
  {indexImage}}"></image>
    <image src="{
  
  {detailImage}}"></image>
  </tab-content>
</tabs>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// test.js
export default {
  data: {
    homeImage: '/common/home.png',
    indexImage: '/common/index.png',
    detailImage: '/common/detail.png',
  },
}

tab-content组件用来展示页签的内容区,高度默认充满tabs剩余空间。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1
2. MySQL 5.1.48 导入 MySQL 5.7.18 时遇到 T FOREIGN_KEY_CHECKS = 0 错误的解决方法
全栈程序员站长
2022/07/19
3.4K0
mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1
主、外键约束_创建主键约束
主键和外键是两种类型的约束; 1.主键是能唯一的标识表中的每一行,就是说这一列非空且值不重复,可以指定为主键;作用是用来强制约束表中的每一行数据的唯一性; 2.外键是b表中的某一列引用的值来源于a表中的主键列。也是约束b表中的外键列的值必须取致a表中的主键列值,不是其中的值就不能插入b表中。可以形成a表b表的联系,保持数据的约束和关联性。
全栈程序员站长
2022/11/03
2.1K0
MySQL数据库外键约束打开与关闭 ️
作为一名技术博主,我们时常需要处理数据库的外键约束。本文将详细介绍如何使用 SQL 命令临时关闭 MySQL 数据库的外键约束检查,并提供了重新开启外键约束检查的方法。我们将探讨关闭外键约束检查的风险,并提供最佳实践建议,以确保数据的完整性和一致性。
默 语
2024/11/20
3960
MySQL常见约束条件「建议收藏」
约束条件:限制表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败! 约束条件在创建表时可以使用, 也可以修改表的时候添加约束条件
全栈程序员站长
2022/11/04
1.6K0
MySQL 解决外键约束不能删除数据的问题
第一种方法是使用MySQL 官方提供的文档方法             这个禁用约束: 运行这个命令 SET FOREIGN_KEY_CHECKS=0; 之后数据库就变成忽略外键约束的状态了,所以就可以进行删除数据了,             操作完毕后一定要记得 SET FOREIGN_KEY_CHECKS=1; 恢复到原来的约束状态 第二种方法就是:             运行保存SQL文件,用记事本删除 相关数据,再把数据导入到数据库中就OK啦
冷冷
2018/02/08
3.7K0
mysql的建表语句_mysql如何查询建表语句
mysql安装教程见博客:MySQL 7.7.25 图文安装教程(Win10) 本篇博客以学生表、课程表以及学生-课程表为例,讲解mysql常用的建表语句。
全栈程序员站长
2022/10/05
8.7K0
mysql的建表语句_mysql如何查询建表语句
约束条件(constraint)「建议收藏」
约束条件也叫完整性约束条件,当对表中的数据做DML操作时会验证数据是否违反约束条件.如果违反了DML操作会失败.约束条件可以应用于表中的一列或几列,应用于整个表或几个表之间.
全栈程序员站长
2022/11/04
1.7K0
MySQL学习之路:数据的完整性-外键约束
数据完整性是指数据的准确性和逻辑一致性,用来防止数据库中存在不符合语义、无效数据或错误数据等。例如,网上商城系统数据库中的商品编号、名称不能为空,订单号必须唯一,邮箱格式必须符合规范等。MySQL中,数据完整性通常使用约束来实现,本任务主要的约束包括PRIMARY KEY约束、NOT NULL约束、DEFAULT约束、UNIQUE约束、CHECK约束和FOREIGH KEY约束。
Daimon
2023/08/23
3750
MySQL学习之路:数据的完整性-外键约束
外键约束
     2.设置外键约束的两个表之间会有 父子关系 ,即字表中外键字段的取值范围 取决于 父表
全栈程序员站长
2022/09/06
1.8K0
数据库表的约束条件[通俗易懂]
解释: on delete set null 一旦主表数据删除,从表关联数据置为null on delete cascade 级联删除,主表数据删除,从表关联数据也删除
全栈程序员站长
2022/11/08
1.1K0
mysql批量清空表数据脚本「建议收藏」
今天手中拿到个之前的db,我要做测试,但是里面表结构比较多,确认数据已经没有用了,但是表结构不知道 有没有用;所以想着把里面的数据给清空了;奈何数据太多,schema都有2k多了,这一个个敲命令得搞死
全栈程序员站长
2022/09/06
3.3K0
zabbix清空历史记录
-----------------------------------------------------------------------
拓荒者
2019/08/27
1.5K0
mysql删除外键约束
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152780.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/12
1.8K0
ddl dml语句_用一句话介绍自己怎么介绍
提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
全栈程序员站长
2022/11/03
1610
谈谈唯一约束和唯一索引的关系_唯一约束和主键约束的一个区别是
最近在看数据库相关知识,感觉唯一约束和唯一索引好像有点类似,于是研究了一番,于是就有了这篇文章。
全栈程序员站长
2022/11/08
1.8K0
谈谈唯一约束和唯一索引的关系_唯一约束和主键约束的一个区别是
SQLServer里面添加约束条件[通俗易懂]
1、主键约束: 格式: alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)
全栈程序员站长
2022/11/08
2.2K0
数据库delete语句菜鸟_MySQL视图
此时 有A和B两个表,当删除A表的记录时,B表关联的字段自动删除,此时需要用到这种方式;
全栈程序员站长
2022/11/18
3.1K0
oracle dml语句_oracle数据库导入dmp语句
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/01
1.5K0
create table as select * from mysql_达梦数据库建表语句
foreign key(addrid) references test1(id));
全栈程序员站长
2022/10/04
6.8K0
create table as select * from mysql_达梦数据库建表语句
MySQL外键约束使用
在MySQL中,外键约束用于确保两个表之间的数据一致性。外键约束是一种限制,它将一个表中的列与另一个表中的列相关联。具体来说,它要求在一个表中的某个列中的值必须在另一个表的某个列中存在。外键约束可以确保数据的完整性和一致性,防止数据被删除或修改时发生错误。
堕落飞鸟
2023/05/11
4.4K0
相关推荐
mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档