鸿蒙学习笔记(4)-Radio组件、弹框组件、组件内部状态、工具类

一、Radio组件

(1)简述

创建单选框组件。接收一个RadioOptions类型对象参数。

名称类型必填说明
valuestring

当前单选框的值。

groupstring

当前单选框的所属群组名称,相同group的Radio只能有一个被选中。

indicatorType12+RadioIndicatorType

配置单选框的选中样式。未设置时按照RadioIndicatorType.TICK进行显示。

indicatorBuilder12+CustomBuilder

配置单选框的选中样式为自定义组件。自定义组件与Radio组件为中心点对齐显示。indicatorBuilder设置为undefined时,按照RadioIndicatorType.TICK进行显示。

(2)注意事项 

1、group属性可以使得单选框实现只能单选或者都可以选,group属性设置一样时,只允许存在一个勾选状态。

2、除支持通用事件以外,还支持onChange事件,单选框选中状态改变时触发回调。

3、除支持通用属性意外,还支持radioStyle,设置单选框选中状态和非选中状态的样式;checked,设置单选框的选中状态;contentModifier,定制Radio内容区的方法,在Radio组件上,定制内容区的方法,modifier: 内容修改器,开发者需要自定义class实现ContentModifier接口。

4、RadioStyle对象说明:checkedBackgroundColor,开启状态底板颜色;uncheckedBorderColor,关闭状态描边颜色;indicatorColor,开启状态内部圆饼颜色。

二、弹框组件

各种弹窗组件使用网址:弹窗-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者

(1)日历弹框组件

1、CalendarPicker,CalendarPicker(options?: CalendarOptions),日历选择器组件,提供下拉日历弹窗,可以让用户选择日期,得到的时间包括那年月日和时分秒,如若获取了当前时间得到的时分秒是需要是转化+8小时才是此时的时间。

2、除支持通用事件,还支持事件:onChange

onChange(callback: (value: Date) => void)

选择日期时触发该事件。

3、CalendarOptions对象说明:

名称类型必填说明
hintRadiusnumber | Resource

描述日期选中态底板样式。

默认值:底板样式为圆形。

说明:

hintRadius为0,底板样式为直角矩形。hintRadius为0 ~ 16,底板样式为圆角矩形。hintRadius>=16,底板样式为圆形。

selectedDate

设置选中项的日期。选中的日期未设置或日期格式不符合规范则为默认值。

默认值:当前系统日期。

(2)日期弹框组件

1、TimePicker,TimePicker(options?: TimePickerOptions),时间选择组件,根据指定参数创建选择器,支持选择小时及分钟,默认以24小时的时间区间创建滑动选择器。

2、TimePickerOptions对象说明:

名称类型必填说明
selectedDate

设置选中项的时间。

默认值:当前系统时间

从API version 10开始,该参数支持$$双向绑定变量。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

format11+TimePickerFormat

指定需要显示的TimePicker的格式。

默认值:TimePickerFormat.HOUR_MINUTE

元服务API: 从API version 12开始,该接口支持在元服务中使用。

3、TimePickerFormat11+枚举说明

名称说明
HOUR_MINUTE按照小时和分显示。
HOUR_MINUTE_SECOND按照小时、分钟和秒显示。

4、除通用属性外的常用属性:

名称说明

useMilitaryTime(value: boolean

设置展示时间是否为24小时制。

disappearTextStyle

设置所有选项中最上和最下两个选项的文本颜色、字号、字体粗细。

textStyle

设置所有选项中除了最上、最下及选中项以外的文本颜色、字号、字体粗细。

selectedTextStyle

设置选中项的文本颜色、字号、字体粗细。

三、 组件内部状态

(1)@state

1、在组件进行数据动态渲染的时候,需要用到组件内部状态。用@state装饰器定义的变量代表组件的内部状态,只要这个变量发生变化,页面ui会进行重新渲染。

2、@state来修饰变量,必须要求变量进行初始化,不能为空值。

3、@state来修饰变量,可以支持object、class、string、boolean等类型。如果出现嵌套类型的数据结构,嵌套对象的属性发生变化,页面无法检测更新。

4、标记为@state的变量默认都是私有变量,只能在组件中访问。

5、关于复杂数据类型的定义:

5.1 在viewmodel目录下定义约束模型,再引入到需要的组件或页面中:

5.2 直接在需要的组件或页面中定义对象类型:

6、页面上要用到的数据,并不是所有的数据都需要大家采用@state来修饰,有些变量无需采用@state的,只需要也买你加载一次,直接定义就可以。 

(2)父子组件通信

在鸿蒙开发中,涉及到父子组件通信我们需要用到两个装饰器,分别是@prop和@link。

(2.1)@Prop

单向数据通信:父组件传递值给子组件,子组件可以使用这个数据进行渲染,但是修改子组件的传递值,父组件是无法同步的。

注意:

1、@Prop只能在@component组件中使用,不能再@entry组件中使用。

2、@Prop来定义变量,可以默认不初始化,代表接受外来数据,即父组件数据。

3、@Prop来定义数据,可以进行修改,但是只能影响本组件,无法同步给父组件。

(2.2)@Link

双向数据通信:父组件传递值给子组件,子组件可以修改传递过去的这个值,同步将内容修改后传递回父组件。

注意:

1、@Link只能在@component组件中使用,不能在@entry组件中使用。

2、@Link来定义变量,可以默认不初始化,代表接受外来数据,即父组件数据。

3、@Link来定义数据,可以进行修改,无论是父组件还是子组件,数据都是同步变化的。

传参方式:

1、子组件中定义一个变量,这个变量可以默认初始化,也可以接受父组件传递的值。

四、日期格式化工具

传递日期进行格式化工具:

// 定义一个配置类 Opt,用于存储日期时间各部分的字符串值
export class Opt {yy: string = ''; // 年(完整年份,如 "2025")mm: string = ''; // 月(补零,如 "03")dd: string = ''; // 日(补零,如 "26")HH: string = ''; // 时(24小时制,补零,如 "14")MM: string = ''; // 分(补零,如 "05")SS: string = ''; // 秒(补零,如 "09")
}/*** 格式化日期时间* @param timestamp 时间戳(毫秒)* @param format 格式字符串,支持以下占位符:*   - y+ 年(如 yy 输出 25,yyyy 输出 2025)*   - m+ 月(如 m 输出 3,mm 输出 03)*   - d+ 日(如 d 输出 5,dd 输出 05)*   - H+ 时(24小时制)*   - M+ 分*   - S+ 秒* @returns 格式化后的日期时间字符串*/
export function formatData(timestamp: number, format: string) {let res: string = ''; // 存储格式化后的结果try {// 1. 将时间戳转换为 Date 对象const date = new Date(timestamp);// 2. 准备日期时间各部分的字符串值(自动补零)const opt: Opt = {yy: date.getFullYear().toString(), // 年(不补零,如 "2025")mm: (date.getMonth() + 1).toString().padStart(2, '0'), // 月(补零,如 "03")dd: date.getDate().toString().padStart(2, '0'), // 日(补零,如 "05")HH: date.getHours().toString().padStart(2, '0'), // 时(补零,如 "14")MM: date.getMinutes().toString().padStart(2, '0'), // 分(补零,如 "05")SS: date.getSeconds().toString().padStart(2, '0'), // 秒(补零,如 "09")};// 3. 使用正则表达式替换格式字符串中的占位符res = format.replace(/y+/g, opt.yy)// 替换年份(支持 yyyy 或 yy).replace(/m+/g, opt.mm)// 替换月份(支持 mm 或 m).replace(/d+/g, opt.dd)// 替换日期(支持 dd 或 d).replace(/H+/g, opt.HH)// 替换小时(支持 HH 或 H).replace(/M+/g, opt.MM)// 替换分钟(支持 MM 或 M).replace(/S+/g, opt.SS); // 替换秒(支持 SS 或 S)} catch (error) {// 4. 错误处理(如传入非法时间戳)console.error('ERROR formatData:', error);}// 返回格式化后的字符串return res;
}

 使用时,先导入在使用(标红处获取格式):

五、 随机日期和气温生成工具

String.protptype.padStart():padStart()方法是用另一个字符串填充当前字符串(如果需要会重复填充),直到达到给定的长度,填充是从当前字符串的开头开始的。

initData():在页面加载时,调用 initData() 从后端获取数据,在开发阶段,可以用 initData() 生成假数据用于测试:

(1)随机日期

export function getRandomCurrentMonth(){let today=new Date()const year=today.getFullYear()const month=today.getMonth()+1let minDay=1;let maxDay=new Date(year,month+1,0).getDate()let randomDay=Math.floor(Math.random()*(maxDay-minDay+1))+minDayreturn `${year}-${String(month).padStart(2,'0')}-${String(randomDay).padStart(2,'0')}`
}

(2)随机温度 

export function getRandomTemperature(): string {const minTemp = 10; // 最低温度const maxTemp = 35; // 最高温度const randomTemp = Math.random() * (maxTemp - minTemp) + minTemp; // 生成随机温度return randomTemp.toFixed(1);
}

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

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

相关文章

111.在 Vue 3 中使用 OpenLayers 实现动态曲线流动图(类似 ECharts 迁徙状态)

在数据可视化领域,ECharts 提供的 迁徙图(流动图) 是一种直观展示数据流动的方式,如人口迁徙、物流流向等。我们可以使用 OpenLayers 结合 Vue 3 来实现类似的 动态曲线流动图,从而在 Web GIS 项目中提供更生动的可视化…

全栈开发项目实战——AI智能聊天机器人

文章目录 一:项目技术栈和代码分析1.前端技术栈(1)HTML(index.html):(2)CSS(styles.css):(3)JavaScript(scrip…

无人机机体结构设计要点与难点!

一、无人机机体结构设计要点 1. 类型与应用场景匹配 固定翼无人机:需优化机翼升阻比,采用流线型机身降低气动阻力(如大展弦比机翼设计)。 多旋翼无人机:注重轻量化框架和对称布局(如四轴/六轴碳纤维机…

eBest AI智能报表:用自然语言对话解锁企业数据生产力

告别传统数据迷宫,让业务洞察"开口即得" 【数据价值被困在系统迷宫中】​ 在数字化转型的深水区,80%的企业正被数据孤岛和越来越多,也越来越复杂的系统所困扰。 • 操作黑洞:用户平均通过6次筛选和层级跳转才能触达目标…

Linux 编程环境

文章目录 VimGCCGDBMake Vim Vim GCC GCC(GNU Compiler Collection)是一款编译语言编译器,此项目最早由GNU计划的发起者理查德 斯托曼开始实施。第一版GCC于1987年发行,最初的GCC代表GNU C Compiler,即GNU的C语言编…

JSONP跨域访问漏洞

一、漏洞一:利用回调GetCookie <?php$conn new mysqli(127.0.0.1,root,root,learn) or die("数据库连接不成功"); $conn->set_charset(utf8); $sql "select articleid,author,viewcount,creattime from learn3 where articleid < 5"; $result…

JuiceFS vs HDFS,最简单的 JuiceFS 入门

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等希望看什么,评论或者私信告诉我! 文章目录 一、背景二、JuiceFS 入门2.1 核心特性2.2 JuiceFS 架构2.3 JuiceFS 如何存储文…

音频进阶学习二十四——IIR滤波器设计方法

文章目录 前言一、滤波器设计要求1.选频滤波器种类2.通带、阻带、过度带3.滤波器设计指标 二、IIR滤波器的设计过程1.设计方法2.常见的模拟滤波器设计1&#xff09;巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09;2&#xff09;切比雪夫滤波器&#xff08;Chebyshev…

vue3源码分析 -- runtime

runtime运行时&#xff0c;主要在packages/runtime-core目录下&#xff0c;核心提供了h、render等函数。在理解它们之前&#xff0c;我们需要了解下HTML DOM 树和虚拟 DOM等概念 HTML DOM 树 通过节点构成的一个树形结构&#xff0c;我们称为HTML DOM节点树。DOM 文档里面做了…

清明假期在即

2025年4月2日&#xff0c;6~22℃&#xff0c;一般 遇见的事&#xff1a;这么都是清明出去玩&#xff1f;你们不扫墓的么。 感受到的情绪&#xff1a;当精力不放在一个人身上&#xff0c;你就会看到很多人&#xff0c;其实可以去接触的。 反思&#xff1a;抖音上那么多不幸和幸…

tomcat 目录结构组成

文章目录 背景文件结构层级一些常用的路径 背景 现在非常多的 java web 服务部署在 linux 服务器中&#xff0c;我们服务器中的 tomcat 会有各种文件路径&#xff0c;看下它有哪些文件 文件结构层级 ├── bin/ # 核心脚本和启动文件 ├── conf/ # …

多层内网渗透测试虚拟仿真实验环境(Tomcat、ladon64、frp、Weblogic、权限维持、SSH Server Wrapper后门)

在线环境:https://www.yijinglab.com/ 拓扑图 信息收集 IP地址扫描 确定目标IP为10.1.1.121 全端口扫描 访问靶机8080端口,发现目标是一个Tomcat服务,版本

NOIP2010提高组.引水入城

*前置题目 901. 滑雪 #include <iostream> #include <algorithm> #include <cstring>using namespace std;const int N 310, INF 0x3f3f3f3f; const int dx[4] {0, -1, 0, 1}, dy[4] {1, 0, -1, 0};int n, m, h[N][N]; int f[N][N]; int ans;int dfs(i…

Share02-小小脚本大大能量

各位看官你们好&#xff0c;又是一篇共享知识点的文章&#xff0c;今天我们来聊一聊脚本在我们上位组态中的作用。各个厂家的上位软件或者触屏软件都内嵌了脚本功能&#xff0c;有的是二次开发的固定指令格式&#xff0c;有的可以接收广域的标准语言指令。它带给我们更多的方便…

LangChain接入azureopenai步骤(2025年初)

背景&#xff1a; 为了快速且规范的实现ai应用&#xff0c;可使用LangChain框架&#xff0c;便于后期维护。虽然deepseek异军突起&#xff0c;在终端用户占有率很高&#xff0c;但是仔细查阅相关api接口&#xff0c;尤其是自有知识库需要使用的文本向量化模型方面&#xff0c;o…

阿里云国际站代理商:模型训练中断数据丢失怎么办?

定期保存训练状态&#xff1a;在训练过程中&#xff0c;设定自动保存训练状态的频率&#xff0c;将模型的参数、优化器状态、训练数据的中间结果等定期保存到存储介质上。这样&#xff0c;当中断发生时&#xff0c;可以恢复到上次保存的状态&#xff0c;避免训练进度的损失。 …

C++17更新内容汇总

C17 是 C14 的进一步改进版本&#xff0c;它引入了许多增强特性&#xff0c;优化了语法&#xff0c;并提升了编译期计算能力。以下是 C17 的主要更新内容&#xff1a; 1. 结构化绑定&#xff08;Structured Bindings&#xff09; 允许同时解构多个变量&#xff0c;从 std::tup…

2025年Axure RP9无法免费使用Axure Cloud的解决方案

解决方案 更换新账号&#xff0c;换了一个邮箱注册&#xff0c;再登陆&#xff0c;又会给你30天的试用期。 对&#xff0c;办法就是换个邮箱注册&#xff0c;又续上30天的试用期。

供应链中的的“四流合一”

在供应链中&#xff0c;物流、资金流、信息流、商流是共同存在的&#xff0c;商流、信息流和资金流的结合将更好的支持和加强供应链上、下游企业之间的货物、服务往来&#xff08;物流&#xff09;。 一、商流 在供应链中&#xff0c;上下游供应商的资金链条均可被金融服务机构…

MonkeyDev 如何创建一个root级级别的app

前提条件:有越狱的手机,XCode中已经安装了Monkeydev 1. 和普通应用一个创建一个ios的工程 2. 在App的TARGETS>build setting> 中设置Apple Development 3. 设置User-Defined的配置 CODE_SIGNING_ALLOWED = NO MonkeyDevBuildPackageOnAnyBuild = NO MonkeyDevClearUi…