尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
HarmonyOS7 综合表单实战:多种输入组件 + 分组布局 + 验证提交
文章目录前言效果展示方案设计状态管理分组布局编码实现基本信息分组联系方式分组偏好设置分组提交与重置按钮优化建议用对象统一管理表单数据分组组件化写在最后前言前面十几篇文章讲了表单的各种零散知识点——输入框、选择器、开关、验证、提交、重置。今天把这些全部串起来做一个大而全的综合表单。这个表单包含基本信息、联系方式、偏好设置三个分组用到 TextInput、Select、Toggle 等多种组件带验证、提交和重置功能。效果展示表单分为三个分组每个分组用标题和白色卡片区分基本信息姓名TextInput必填性别Select 下拉选择年龄TextInput数字类型联系方式手机号TextInput电话类型必填邮箱TextInput邮箱类型个人简介TextInput偏好设置接收通知Toggle 开关同意服务条款Checkbox方案设计状态管理StatefName:stringStatefGender:string男StatefAge:stringStatefPhone:stringStatefEmail:stringStatefBio:stringStatefNotify:booleantrueStatefAgree:booleanfalseStateresultText:string9 个状态变量覆盖所有字段。变量名用f前缀避免跟其他变量冲突。分组布局每个分组是一个Column内部用RowDivider排列字段。分组标题用主题色 粗体Text(基本信息).fontSize(14).fontWeight(FontWeight.Bold).fontColor(#4D96FF).margin({left:8,top:12,bottom:8})编码实现基本信息分组Column(){Text(基本信息).fontSize(14).fontWeight(FontWeight.Bold).fontColor(#4D96FF).margin({left:8,top:12,bottom:8})// 姓名Row(){Text(姓名 *).fontSize(14).fontColor(#333333).width(70)TextInput({placeholder:请输入姓名}).onChange((v:string){this.fNamev}).layoutWeight(1)}.width(100%).padding({top:8,bottom:8})Divider()// 性别Row(){Text(性别).fontSize(14).fontColor(#333333).width(70)Select([{value:男},{value:女},{value:其他}]).value(男).font({size:14}).fontColor(#333333).onSelect((index:number,value?:string){if(value)this.fGendervalue}).layoutWeight(1)}.width(100%).padding({top:8,bottom:8})Divider()// 年龄Row(){Text(年龄).fontSize(14).fontColor(#333333).width(70)TextInput({placeholder:请输入年龄}).type(InputType.Number).onChange((v:string){this.fAgev}).layoutWeight(1)}.width(100%).padding({top:8,bottom:8})Divider()}联系方式分组Text(联系方式).fontSize(14).fontWeight(FontWeight.Bold).fontColor(#4D96FF).margin({left:8,top:12,bottom:8})Row(){Text(手机号 *).fontSize(14).fontColor(#333333).width(70)TextInput({placeholder:请输入手机号}).type(InputType.PhoneNumber).onChange((v:string){this.fPhonev}).layoutWeight(1)}.width(100%).padding({top:8,bottom:8})Divider()Row(){Text(邮箱).fontSize(14).fontColor(#333333).width(70)TextInput({placeholder:请输入邮箱}).type(InputType.Email).onChange((v:string){this.fEmailv}).layoutWeight(1)}.width(100%).padding({top:8,bottom:8})Divider()Row(){Text(个人简介).fontSize(14).fontColor(#333333).width(70)TextInput({placeholder:简单介绍自己}).onChange((v:string){this.fBiov}).layoutWeight(1)}.width(100%).padding({top:8,bottom:8})Divider()偏好设置分组Text(偏好设置).fontSize(14).fontWeight(FontWeight.Bold).fontColor(#4D96FF).margin({left:8,top:12,bottom:8})Row(){Text(接收通知).fontSize(14).fontColor(#333333).width(70)Toggle({type:ToggleType.Switch,isOn:true}).selectedColor(#4D96FF).onChange((v:boolean){this.fNotifyv})}.width(100%).padding({top:8,bottom:8})Divider()Row(){Toggle({type:ToggleType.Checkbox,isOn:false}).width(20).height(20).selectedColor(#4D96FF).onChange((v:boolean){this.fAgreev})Text( 同意服务条款).fontSize(13).fontColor(#999999)}.width(100%).padding({left:8,top:8,bottom:8})提交与重置按钮Row(){Button(重置).width(45%).height(44).backgroundColor(#E0E0E0).borderRadius(10).fontColor(#333333).fontSize(15).onClick((){this.fNamethis.fAgethis.fPhonethis.fEmailthis.fBiothis.resultText})Button(提交).width(45%).height(44).backgroundColor(#4D96FF).borderRadius(10).fontColor(#FFFFFF).fontSize(15).onClick((){if(!this.fName){promptAction.showDialog({title:提示,message:请输入姓名,buttons:[{text:确定,color:#007DFF}]})return}if(!this.fPhone){promptAction.showDialog({title:提示,message:请输入手机号,buttons:[{text:确定,color:#007DFF}]})return}this.resultText姓名:${this.fName}| 性别:${this.fGender}| 年龄:${this.fAge}\n手机:${this.fPhone}| 邮箱:${this.fEmail}\n简介:${this.fBio||无}| 通知:${this.fNotify?开:关}promptAction.showDialog({title:提交成功,message:this.resultText,buttons:[{text:确定,color:#007DFF}]})})}.width(100%).justifyContent(FlexAlign.SpaceBetween)提交时验证两个必填字段姓名和手机号通过后用promptAction.showDialog展示汇总数据。优化建议用对象统一管理表单数据字段多了之后散落的State变量不好管理。可以用一个对象统一管理StateformData{name:,gender:男,age:,phone:,email:,bio:,notify:true,agree:false}提交时直接JSON.stringify(this.formData)就行。分组组件化把分组封装成自定义组件Componentstruct FormSection{Proptitle:stringbuilderParamcontent:()voidbuild(){Column(){Text(this.title).fontSize(14).fontWeight(FontWeight.Bold).fontColor(#4D96FF).margin({left:8,top:12,bottom:8})this.content()}}}写在最后综合表单就是把前面学到的各种组件——TextInput、Select、Toggle——按照分组组织起来再加上验证和提交逻辑。核心思路没变每个字段对应一个状态变量提交时汇总所有变量。这种分组 多组件的表单模式适用于绝大多数业务场景。掌握了它你就能应对几乎所有的表单需求。
RELATED

相关推荐

ROS 2和ROS 1的比较

ROS 2和ROS 1的比较

下图展示了ROS 2和ROS 1在架构上的比较,两者主要实现了机器人开发中的中间层,主要提供了机器人人中的关键通信机制。ROS 2改进了ROS 1的通信模式,引入了DDS(Data Distribution Service,数据分发服务)作为通…

📅 2026/9/11 20:41:31
Mysql数据库表的操作

Mysql数据库表的操作

登录数据库mysql -u 用户名 -h 服务器的主机地址 -p密码 -A-u 后面跟登录数据库的用户名,这里使用root-h 后面的参数是服务器的主机地址,在这里客户端和服务器在同一台机器上,所以输入 localhost 或 者 IP 地址-p 后面是用户登录密码&#…

📅 2026/9/11 20:41:41
Spring Gateway+Sa-Token+Nacos构建微服务统一认证方案

Spring Gateway+Sa-Token+Nacos构建微服务统一认证方案

1. 项目背景与核心价值在微服务架构中,认证鉴权是保障系统安全的第一道防线。传统方案往往需要在每个服务中重复实现安全逻辑,不仅开发效率低下,还容易因实现不一致导致安全漏洞。我们这套基于Spring Gateway Sa-Token Nacos的技术组合&…

📅 2026/9/9 19:05:45
MORE NEWS

更多资讯

📰

电池充电电路中的路径管理:防倒灌、DPPM与低功耗设计

电池充电电路的设计里,大家最关注的往往是充电电流精度、截止电压、充电截止电流这些参数,但真正决定一块电池管理系统“能不能用”的,反而是路径管理。简单说,路径管理解决的不是“怎么把电充进电池”,而是“适配器、…

📰

Impeccable Asset Producer:以 Comp 为参考的可复用栅格资源生产线

Impeccable Asset Producer:以 Comp 为参考的可复用栅格资源生产线 【免费下载链接】impeccable The design language that makes your AI harness better at design. 项目地址: https://gitcode.com/GitHub_Trending/im/impeccable 导读 本文讲解 Impeccab…

📰

MongoDB副本集读写分离:实现高可用与低延迟的数据访问

MongoDB副本集读写分离:实现高可用与低延迟的数据访问 1. MongoDB副本集读写分离基础 MongoDB副本集是一组维护相同数据集合的mongod进程,通过复制实现数据冗余与高可用。读写分离是指在副本集中将读操作和写操作分配到不同的节点执行,从而分…

📰

MongoDB 存储引擎选型:WiredTiger、In-Memory 与加密引擎的对比分析

MongoDB 存储引擎选型:WiredTiger、In-Memory 与加密引擎的对比分析 1. MongoDB 存储引擎概述 MongoDB 从 3.0 版本开始引入了可插拔存储引擎架构,允许用户根据不同的业务需求选择合适的存储引擎。存储引擎是 MongoDB 核心组件之一,负责数据的…

📰

ML-For-Beginners 回归实验:使用全量南瓜数据构建并评估逻辑回归分类模型

ML-For-Beginners 回归实验:使用全量南瓜数据构建并评估逻辑回归分类模型 【免费下载链接】ML-For-Beginners 12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all 项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners 导读…

📰

ISO/IEC 17025 实验室认可准备:证据架构驱动的测试与校准实验室能力准备指南

ISO/IEC 17025 实验室认可准备:证据架构驱动的测试与校准实验室能力准备指南 【免费下载链接】scientific-agent-skills Turn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-u…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬