【开发者说】栏目是为HarmonyOS开发者提供的展示和分享平台,在这里,大家可以发表自己的技术洞察和见解,也可以展示自己的开发心得和成果。
欢迎大家积极投稿,后台回复【投稿】,即可获得投稿渠道。期待你们的分享~
开发者Mack基于HarmonyOS的ArkUI框架开发的IQ- EQ测试应用。此应用采用eTS语言开发,包含启动页面、测试入口页面、答题页面和得分页面等多个页面,功能非常完善。
IQ- EQ测试应用的实现效果,请参考华为开发者论坛中作者的原帖:https://developer.huawei.com/consumer/cn/blog/topic/03728323510050211
此应用的开发过程中涉及很多知识点,下面我们一起跟随Mack的开发过程,一起学习eTS开发知识吧~一、代码结构介绍
我们先来看看IQ- EQ测试应用的文件目录结构,相关文件说明如图1所示。
(左右滑动,查看更多)"js": [
{
"mode": {
"syntax": "ets", //表示以声明式语法风格进行编程
"type": "pageAbility"
},
"pages": [
"pages/index", //“pages”列表的第一个页面为应用的启动页
"pages/start",
"pages/iqTest",
"pages/iqScore",
"pages/eqTest",
"pages/eqScore"
],
"name": "default",
"window": {
"designWidth": 720,
"autoDesignWidth": false
}
}
]
二、关键代码及知识点
在开发IQ- EQ测试应用的过程中,主要运用了容器组件、装饰器、页面路由和AppStorage等。下面,我们就结合IQ- EQ测试应用的关键代码,一起来学习这些知识点。
1. 容器组件(左右滑动,查看更多)build() {
Column() {
// 顶部标题
TopTitle()
Scroll() {
Column() {
// 显示问题列表
List() {
ForEach(this.questionsDataArray, item => {
ListItem() {
// 循环展示问题
QuestionsListItem({ questionItem: item, questionsId:item.id,
btnSubmit:$btnSubmit1})
}
}, item => item.id.toString())
}
…
https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-container-column-0000001111421414
2.装饰器(左右滑动,查看更多)struct Index {
private opacityValue: number = 0
private scaleValue: number = 0
build() {
…
}
}
(1) @Component
开发者可以组合系统组件为自定义组件,通过这种方式将页面组件化为一个个独立的UI单元,实现页面不同单元的独立创建、开发和复用。
@Component是组件化的标志。@Component装饰的struct,表示该结构体具有组件化能力,能够成为一个独立的组件,称为自定义组件。自定义组件必须定义build方法,在build方法里描述UI结构。
(2) @Entry
@Entry装饰的自定义组件,表示该组件是页面的总入口,也可以理解为页面的根节点。加载页面时,将首先创建并呈现@Entry装饰的自定义组件。值得注意的是,一个页面有且仅能有一个@Entry,只有被@Entry修饰的组件或者其子组件,才会在页面上显示。
(3) @State
@State装饰的变量是组件内部的状态数据,当这些状态数据被修改时,将会调用所在组件的build方法进行UI刷新。
除了以上三种装饰器,方舟开发框架还提供了@Prop、@Link、@Observed、@ObjectLink、@Consume、@Provide、@StorageProp、 @StorageLink、@Watch、@Preview、@Builder、@Extend、@CustomDialog等装饰器。装饰器的更多详细内容,尽在声明式语法中。
声明式语法的详细介绍,请参见:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ts-syntax-intro-0000001149818707(左右滑动,查看更多)import router from '@system.router';
router.push({
uri: 'pages/iqTest',
params: { paramCurrentId:(this.currentId + 1)} // 自动跳转下一题
})
https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-basic-features-routes-0000000000611824
4. AppStorageAppStorage是整个UI应用程序状态的中心“数据库”,包含整个应用程序需要访问的所有状态属性。AppStorage提供了相应的装饰器和接口供应用程序使用。应用程序的UI组件可以通过装饰器将应用程序状态数据与AppStorage进行同步。此外,应用程序还可以通过AppStorage提供的接口添加、读取、修改和删除AppStorage中保存的应用程序状态属性。API所做更改引起的状态数据变更会被同步到UI组件上,应用程序将会调用所在组件的build方法进行UI更新。
此IQ- EQ测试应用也调用了AppStorage的接口来修改和删除状态属性。(1) IQ测试时,应用程序将每一题的选择结果保存到AppStorage中。代码如下:(左右滑动,查看更多)// 点击图片表示选择, 保存题目的选择结果
AppStorage.SetOrCreate("question_id_"+this.currentId,item.id)
AppStorage.Delete('question_id_'+item.id)
(左右滑动,查看更多)三、结束语
上面介绍的eTS开发知识,你已经学会了吗?感兴趣的小伙伴,可以获取IQ- EQ测试应用的完整代码,继续学习哦~
IQ- EQ测试应用的源码地址:https://gitee.com/mackyuan/IQ_EQ_Test_eTS全部0条评论
快来发表一下你的评论吧 !