想学习eTS开发?教你开发一款IQ-EQ测试应用

HarmonyOS NEXT应用开发之AppStorage:应用全局的UI状态存储 AppStorage是在应用启动的时候会被创建的单例。它的目的是为了提供应用状态数据的中心存储,这些状态数据在应用级别都是可访问的。AppStorage将在应用运行过程保留其属性。属性通过唯一的键字符串值访问。AppStorage可以和UI组件同步,且可以在应用业务逻辑中被访问。AppStorage支持应用的 主线程 内多个UIAbility实例间的状态共享。 阅读详情

原文:想学习eTS开发?教你开发一款IQ-EQ测试应用,点击链接查看更多技术内容。

开发者Mack基于HarmonyOS的ArkUI框架开发的IQ- EQ测试应用。此应用采用eTS语言开发,包含启动页面、测试入口页面、答题页面和得分页面等多个页面,功能非常完善。

IQ- EQ测试应用的实现效果,请参考华为开发者论坛中作者的原帖:https://developer.huawei.com/consumer/cn/blog/topic/03728323510050211

此应用的开发过程中涉及很多知识点,下面我们一起跟随Mack的开发过程,一起学习eTS开发知识吧~

一、代码结构介绍

我们先来看看IQ- EQ测试应用的文件目录结构,相关文件说明如图1所示。

图1 文件目录结构

  1. 此应用的核心代码文件(即eTS文件)均在/entry/src/main/ets目录下,文件后缀为“.ets”。由图1可知,eTS文件主要分为两部分:

  • ets/default/module目录下的eTS文件,用于定义IQ和EQ测试题目数据。

  • ets/default/pages目录下的eTS文件,用于定义应用的UI界面。

  1. “resource”目录为项目资源存放目录,存放图片资源和国际化字符串等。

  2. config.json为应用的配置文件。eTS开发时,需关注该文件中module对象的js标签内容。

"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. 容器组件

方舟开发框架提供了丰富的系统预置组件。开发者可以组合系统组件为自定义组件,通过这种方式将页面组件化为一个个独立的UI单元,实现页面不同单元的独立创建、开发和复用。本次IQ- EQ测试应用,通过对容器组件的组合使用,实现了多个页面的UI布局。比如,EQ测试题目页(对应ets/default/pages/eqTest.ets文件)的部分布局代码如下:

  build() {
      Column() {
           // 顶部标题
          TopTitle()
          Scroll() {
              Column() { 
                  // 显示问题列表 
                   List() {         
                      ForEach(this.questionsDataArray, item => {             
                          ListItem() {                
                              // 循环展示问题                
                              QuestionsListItem({ questionItem: item,  questionsId:item.id,              
                                   btnSubmit:$btnSubmit1})
                          }         
                       }, item => item.id.toString())   
                    }         
                   …

此应用使用到的一些容器组件,说明如下:

  • Column:沿垂直方向布局的容器组件。

  • Row:沿水平方向布局的容器组件。

  • Scroll:可滚动的容器组件,当子组件的布局尺寸超过父组件的视口时,内容可以滚动。

  • Grid:网格容器组件,采用二维布局,将容器划分成“行”和“列”。

  • List:列表组件,包含一系列相同宽度的列表项。

  • Flex:弹性布局组件。

  • Stack:堆叠容器组件,子组件按照顺序依次入栈,后一个子组件覆盖前一个子组件。

更多组件说明,请参见:https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-container-column-0000001111421414

  1. 装饰器

方舟开发框架还定义了一些具有特殊含义的装饰器,用于装饰类、结构、方法和变量。下面就结合本次IQ- EQ测试应用,为大家介绍几种常用的装饰器。

比如,启动页(对应ets/default/pages/index.ets文件)的代码如下:

@Entry
@Component
struct Index {




  @State private opacityValue: number = 0
  @State private scaleValue: number = 0




  build() {
…
  }
}

以上代码中涉及到了三种常用的装饰器:@Component、@Entry、@State。

(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

  1. 页面路由

IQ测试时,答完一题后支持自动跳转到下一题,这里涉及页面路由的操作。为方便开发者实现页面路由的各种操作,HarmonyOS提供了多种页面路由接口。

IQ测试题目页(对应ets/default/pages/iqTest.ets文件)中页面路由的代码如下:

import router from '@system.router';




router.push({
  uri: 'pages/iqTest',
  params: { paramCurrentId:(this.currentId + 1)}  // 自动跳转下一题
})

在调用页面路由接口之前,先导入router模块。然后,通过调用router.push()接口,将uri指定的页面添加到路由栈中,即可实现跳转到uri指定的页面。

上面仅介绍了一种页面路由接口。更多页面路由接口的详细说明,请参见:https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-basic-features-routes-0000000000611824

  1. AppStorage

AppStorage是整个UI应用程序状态的中心“数据库”,包含整个应用程序需要访问的所有状态属性。AppStorage提供了相应的装饰器和接口供应用程序使用。应用程序的UI组件可以通过装饰器将应用程序状态数据与AppStorage进行同步。此外,应用程序还可以通过AppStorage提供的接口添加、读取、修改和删除AppStorage中保存的应用程序状态属性。API所做更改引起的状态数据变更会被同步到UI组件上,应用程序将会调用所在组件的build方法进行UI更新。

此IQ- EQ测试应用也调用了AppStorage的接口来修改和删除状态属性。

(1) IQ测试时,应用程序将每一题的选择结果保存到AppStorage中。代码如下:

// 点击图片表示选择, 保存题目的选择结果
AppStorage.SetOrCreate("question_id_"+this.currentId,item.id)

(2) IQ测试完成后,点击“再测一遍”时,应用程序调用AppStorage的接口删除所有题目的选择结果。代码如下:

AppStorage.Delete('question_id_'+item.id)

AppStorage的更多详情,请参见:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ts-application-states-appstorage-0000001119929480

三、结束语

上面介绍的eTS开发知识,你已经学会了吗?感兴趣的小伙伴,可以获取IQ- EQ测试应用的完整代码,继续学习哦~

IQ- EQ测试应用的源码地址:https://gitee.com/mackyuan/IQ_EQ_Test_eTS 

 点击链接 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-ts-overview-0000001192705715

 跳转"文档指南”,可以进入HarmonyOS官网学习基于TS扩展的声明式开发范式。

欢迎更多开发者加入eTS开发,与我们共享开发成果,分享技术解读与经验心得!

Si4732与MK20DX128VFM5在数字广播接收中的优化设计 数字信号处理(DSP)技术在广播接收系统中扮演着核心角色,通过将模拟信号转换为数字域进行处理,显著提升了信号质量和抗干扰能力。Si4732作为专业级DSP收音机芯片,与ARM Cortex-M4微控制器MK20DX128VFM5的组合,实现了硬件解调与软件算法处理的完美结合。这种架构在保证接收灵敏度的同时,通过数字滤波、动态降噪等算法优化音质,特别适用于车载音响、应急通信等场景。系统设计中,射频前端匹配、电源降噪等硬件优化,配合FreeRTOS实时任务调度和NEON指令加速,使FM接收灵敏度达到-114dB 阅读详情

相关推荐

【Harmony OS】【ArkUI】ets开发 基础页面布局与数据连接

ets开发 基础页面布局与数据连接

华为开发者联盟 2049

鸿蒙:应用级变量的状态管理

读取从AppStorage/LocalStorage同步属性的数据。从API version 9开始,该接口支持在ArkTS卡片中使用。类型描述TAppStorage/LocalStorage同步属性的数据。

baidu_24743861的博客 1924

鸿蒙OpenHarmony【应用级变量的状态管理】自定义组件

状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。

hhhhhh2323的博客 1246

HarmonyOS 通过AppStorage定义组件共享数据

这里 我们定义了一个data 类型为object 通过 AppStorage.Get 获取键为 dataMap的值。我们设置了一个button按钮 点击时 用 AppStorage.SetOrCreate 存入一个键值对。然后 我们可以通过 AppStorage.Get(“键名”) 获取数据。我们index组件 开启预览器 点击这里赋值 并且跳转向下一个界面。Set是 如果键值存在 他会覆盖 但是 如果键值不存在 就会赋值不上。SetOrCreate则是 如果没有就赋值 如果有了 就修改。

weixin_45966674的博客 1321

鸿蒙文件 ets和ts 的区别

HarmonyOS也提供标准的TS/JS执行环境,在需要TS代码复用的场景中,可以使用.ts文件进行开发。在鸿蒙操作系统(HarmonyOS)的开发中,ETS(Enhanced TypeScript)和TS(TypeScript)文件都用于编写应用程序逻辑,但它们有一些关键的区别,特别是在语法特性和对鸿蒙特定功能的支持上。ets调用ts文件中定义的方法,可以使用ES6中import引入及export导出的语法,将ts文件中的方法进行export导出,在ets文件中import引入该方法进行调用。

ATRSnail的博客 5048

鸿蒙Harmony应用开发—ArkTS-应用级变量的状态管理

状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。

m0_64420071的博客 1428

鸿蒙——数据持久化存储(AppStorage、PersitentStoreage、数据库、首选项)

1.localStorage是页面级数据存储,在页面中创建实例,组件中使用@LocalStorageLink和@LocalStorageProp装饰器修饰对应的状态变量,绑定对应的组件使用比状态属性更灵活。appStorage是进程级数据存储,进程启动时自动创建了唯一实例,在各个页面组件中@StorageProp和@StorageLink装饰器修饰对应的状态变量。localStorage和appStorage数据存取都是在主线程进行的,且api只提供了同步接口,存取数据时要注意数据的大小。

priest44的博客 1万+

HarmonyOS NEXT应用开发:ArkTS语言状态管理-AppStorage:应用全局的UI状态存储

本文仅介绍AppStorage使用场景和相关的装饰器:@StorageProp和@StorageLink。

ZPYQAQ的博客 815

100行代码实现HarmonyOS“画图”应用,eTS开发走起

本期我们给大家带来的是“画图”应用开发者Rick的分享,希望能给你的HarmonyOS开发之旅带来启发~ 介绍 2021年的华为开发者大会(HDC2021)上,HarmonyOS 发布了新一代的声明式UI框架——方舟开发框架(ArkUI)。ArkUI框架引入了基于TS扩展的声明式开发范式,让开发变得更加简洁、高效! 已经有很多开发者在使用eTS(extended TypeScript)语言,基于声明式开发范式开发应用了。本期我们要介绍的就是eTS开发先行者Rick的分享——100行代码实现.

HarmonyOSDev的博客 2656

智力测试情商测试提升智力小程序源码

这是一个考验智力,心里上面的一个测试游戏 支持多种测试方法比如有: 智商测试丨情商测试 性格测试丨爱情测试 抑郁症测试丨焦虑症测试 心理压力测试丨生活满意度测试 通过不同的测试,来检查你的智力,情商等等 通过发行自己的不住来弥补自己的不足所以这就是为什么小编会说是一个实用的小程序 另外也是支持流量主模式的,大家自己到时候替换就可以了!

STM32L151C8T6低功耗实战:RTC闹钟唤醒停机模式的配置与优化

本文详细介绍了如何在STM32L151C8T6微控制器上配置与优化RTC闹钟唤醒停机模式,以实现极致的低功耗设计。文章从核心原理出发,结合STM32CubeMX配置实战,深入讲解了进入停机模式前的关键准备工作、唤醒后的系统恢复流程,并分享了将功耗降至个位数微安级的深度优化技巧与常见问题解决方案。

weixin_29166013的博客 301

鸿蒙Harmony--AppStorage--应用全局的UI状态存储详解

无所求必满载而归,当你降低期待,降低欲望,往往会得到比较好的结果,把行动交给现在,用心甘情愿的态度,过随遇而安的生活,无论结果如何,都是一场惊喜的获得!

袁震的博客 5856

树莓派与无人机协同实战:基于OpenCV的地标识别优化策略

本文深入探讨了基于树莓派与无人机的协同系统,重点分享了利用OpenCV优化地标识别以实现精准降落的实战策略。内容涵盖从应对复杂光照的图像预处理、鲁棒的轮廓几何过滤,到通过ROS进行稳定通信,以及实现分层控制与状态机设计,旨在提升系统在真实环境中的可靠性与性能。

y2z3a4b5c的博客 1086

Harmony OS (eTS语言)的起源和演进

Mozilla创造了JS,Microsoft创建了TS,Huawei进一步推出了eTS。eTS(extended TypeScript)是鸿蒙(Harmony)生态的一种应用开发语言。也是Harmony系统(Harmony开发语言java、js、eTS,Harmony3.0后java语言废弃了)主推的一种开发语言。它在TypeScript(简称TS)的基础上,扩展了声明式UI、状态管理等相应的能力,让开发者可以以更简洁、更自然的方式开发高性能应用。

qq_36158551的博客 6662

ST MotorControl Workbench 6.2.1 自定义硬件配置避坑指南

本文详细介绍了ST MotorControl Workbench 6.2.1在自定义硬件配置中的常见问题与解决方案,涵盖功率板配置、采样电路校准、电机参数设置及代码生成避坑指南,帮助开发者高效完成电机控制项目开发。

red88的博客 1024

从ARM转战TI DSP:手把手教你用CCS 10.1.1搭建F280049C的第一个工程(含CMD文件避坑指南)

本文详细介绍了从ARM开发转向TI DSP(TMS320F280049C)的完整流程,包括CCS 10.1.1开发环境配置、工程搭建、CMD文件避坑指南以及外设开发实战。特别针对ARM开发者常见的DSP特性差异问题提供了解决方案,帮助初学者快速入门DSP开发。

weixin_42536058的博客 373

鸿蒙系统数据存储方式详解

鸿蒙系统(HarmonyOS)提供了多样化的数据存储解决方案,覆盖从轻量级配置到复杂结构化数据、从内存临时存储到持久化存储、从单设备到分布式场景的各种需求。以下是所有存储方式的系统化总结。

梦想不只是梦与想的博客 2374

NPP/VIIRS夜间灯光数据下载和介绍

夜间灯光数据作为当前比较火热的研究数据,与其他遥感数据不同,它是通过DN值来体现所携带的信息,最常用的使用月度数据。 该数据数据量大,下载慢,相对来说较难快速获取。 一、数据下载 美国国家海洋大气管理局NOAA下属的NCEI国家环境信息中心Earth Observation Group。 二、月度数据文件介绍 从网站上下载的逐月的灯光数据文件是压缩包的形式,每月的数据包括vcm, vcmsl两个版本的压缩包,其中vcm版本排除了受杂散光影响的数据,vcmsl版本为辐射值经过杂散光校正程序后的数

端木宛白的博客家园 7376

手把手教你实现基于eTS的分布式计算器

最近收到很多小伙伴反馈,想基于扩展的TS语言(eTS)进行HarmonyOS应用开发,但是不知道代码该从何处写起,从0到1的过程让新手们抓狂。 本期我们将带来“分布式计算器”的开发,帮助大家了解声明式开发范式的UI描述、组件化机制、UI状态管理、渲染控制语法等核心机制和功能。下面我们直接进入正题。 一、整体介绍 分布式计算器可以进行简单的数值计算,并支持远程拉起另一个计算器FA,实现两个FA进行协同计算。 如图1所示,分布式计算器界面主要由“键盘”、“显示”及“标题栏”三个

HarmonyOSDev的博客 1207

SpringCloud Alibaba - Seata 实现高可用和异地容灾

这里不仅仅要实现高可用,还需要实现异地容灾. 异地容灾就是说,如果你整了好几个节点部署起来,全部放到一个机房里面,那么如果这个机房出了故障,就意味着整个集群就完了,所以对于一个大型的集群来讲,都会把这些服务异地部署.问题2:如果我们要实现异地容灾,也就说某一个机房挂了,需要快速的切换到另一个可用的机房,但是这个配置在配置文件中写死了,如果要改配置文件,还需要重启服务器,这是我们不希望看到的,怎么办?进入 seata/bin 目录,运行 seata-server.bat 文件,默认端口为 8091。

CYK_byte的博客 975

38、四旋翼无人机的机械建模、控制与仿真及小型无人机高度的最优鲁棒无模型控制

本文探讨了四旋翼无人机的机械建模、控制与仿真方法,采用基于PID控制器的分层控制策略实现稳定飞行与路径跟踪,并开发了结合CAD模型与MATLAB环境的飞行模拟器。同时,针对小型无人机高度控制问题,提出了一种基于粒子群优化(PSO)的最优鲁棒无模型控制(PSO-MFC)方法,有效解决了参数整定难题,实现了零稳态误差跟踪和强抗干扰能力。两种方法在仿真中均表现出良好性能,为无人机控制系统的设计与优化提供了理论与实践基础。

l6m7n8的博客 100

OpenHarmony应用开发—ArkUI组件集合

使用全局组件ShowToast,TitleBar,IntroductionTitle实现按钮,时间选择器,单选按钮,选择菜单,滑动条,切换按钮,勾选框,文本选择器,时间选择器,计数器,评分条组件功能。使用全局组件TitleBar,AttributeModificationTool实现二维码,进度条,跑马灯,文字计时器,文字时钟,仪表盘,数据面板组件功能。若不存在三级导航,则跳转至详情页面。使用全局组件TitleBar实现标记,滚动条,下拉刷新,弹出面板,字母索引条组件功能。

OpenHarmony_dev的博客 1121

Android 13.0 framework默认沉浸式导航栏功能实现

​ 在13.0的系统rom定制化开发中,在实现导航栏的某些定制化开发中,在某些产品需要实现沉浸式导航栏,就是需要app 能全屏显示同样也能显示导航栏,接下来就来分析下相关的功能实现 ​

安卓兼职framework和app工程师的博客 467

【NAPI】ets接口常用代码记录

NAPI的概念源自Nodejs,为了实现javascript脚本与C++库之间的相互调用,Nodejs对V8引擎的api做了一层封装,称为NAPI。NAPI接口本身是C++语言实现的,这些接口可以帮助C++代码创建JS变量,或访问JavaScript运行环境中的JS变量与方法。所以,openharmony新增ets接口时,常会用到napi,下面即是常用的代码示例。类型的指针,以便访问传递过来的数据。打印napi_value里面所有字段的方法,方便定位。在上面的示例代码中,我们将要传递给子线程的。

cocoduco的博客 705

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LabVIEW和IQ测试仪进行WiFi测试

介绍一个使用LabVIEW和LitePoint IQxel-MW IQ测试仪进行WiFi测试的系统。包括具体的硬件型号、如何实现通讯、开发中需要注意的事项以及实现的功能。

bjcyck的博客 1153

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

2026.11.7 AI学习总结

110 你 14b 模型权重本身就要约 8.8GB,默认上下文(Ollama 在 16GB 卡上可能给到 4K)加上 KV Cache 就爆了。比如设成 2048,你输入了 500 个 token 的问题,那模型最多还能生成 1500 个 token 的回答。超出部分会被截断,模型就"看不见"了。4 如果 14b 跑起来后发现它"忘事",再逐步往上加,比如先试 4096。,根据注意力头的重要性动态分配缓存资源,重要的留显存,不重要的下沉。,单位是 token,表示模型这一次推理最多能同时"看到"多少内容。

qq_41181702的博客 375
上一篇: 【直播回顾】Hello HarmonyOS系列应用篇完美收官!
下一篇: DevEco Device Tool 3.0 Release带来5大能力升级,让智能设备开发更高效
「已注销」
博客等级 码龄5年 1045粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值