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——按照分组组织起来再加上验证和提交逻辑。核心思路没变每个字段对应一个状态变量提交时汇总所有变量。这种分组 多组件的表单模式适用于绝大多数业务场景。掌握了它你就能应对几乎所有的表单需求。

相关新闻

HarmonyOS7 动态表单:用 ForEach 实现字段的增删操作

HarmonyOS7 动态表单:用 ForEach 实现字段的增删操作

文章目录前言灵感来源设计思路数据模型实现过程状态管理ForEach 渲染字段列表添加字段按钮展示所有字段踩坑总结坑一:ForEach 的 key 问题坑二:splice 不触发 UI 更新坑三:onChange 里的闭包陷阱完整代码写在最后前言 大部分表单的字段是固定…

2026/7/18 4:19:27 阅读更多 →
HarmonyOS7 多步骤表单向导:StepIndicator 与条件渲染的协作

HarmonyOS7 多步骤表单向导:StepIndicator 与条件渲染的协作

文章目录前言应用场景设计思路步骤规划状态管理实现过程步骤指示器条件渲染各步骤内容导航按钮进阶玩法步骤间的数据验证步骤指示器组件化写在最后前言 有些表单字段太多,一口气让用户填完会让人望而却步。这时候把表单拆成多个步骤,一步一步引导用户填…

2026/7/18 4:19:27 阅读更多 →
HarmonyOS7 设置页面实战:Toggle 开关与 Slider 滑块的组合布局

HarmonyOS7 设置页面实战:Toggle 开关与 Slider 滑块的组合布局

文章目录前言效果展示实现原理代码详解分组标题Toggle 开关项Slider 滑块项完整代码进阶技巧设置项的即时反馈Slider 的离散值分组之间的视觉分隔写在最后前言 每个 App 都有设置页面。通知开关、声音设置、字体大小调整……这些功能看起来简单,但要把它们排得整齐…

2026/7/18 4:19:27 阅读更多 →

最新新闻

ESP32 Arduino开发终极指南:快速搭建物联网项目环境

ESP32 Arduino开发终极指南:快速搭建物联网项目环境

ESP32 Arduino开发终极指南:快速搭建物联网项目环境 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 想要用熟悉的Arduino语法开发强大的ESP32物联网项目吗&…

2026/7/18 8:25:12 阅读更多 →
深入KiwiTalk核心:Rust后端与TypeScript前端的完美结合

深入KiwiTalk核心:Rust后端与TypeScript前端的完美结合

深入KiwiTalk核心:Rust后端与TypeScript前端的完美结合 【免费下载链接】KiwiTalk An UNOFFICIAL cross-platform KakaoTalk client written in TypeScript & Rust (SolidJS, tauri) 项目地址: https://gitcode.com/gh_mirrors/ki/KiwiTalk 欢迎来到Kiwi…

2026/7/18 8:25:12 阅读更多 →
你的微信聊天记录,正在成为AI时代的数字遗产

你的微信聊天记录,正在成为AI时代的数字遗产

你的微信聊天记录,正在成为AI时代的数字遗产 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …

2026/7/18 8:25:12 阅读更多 →
终极防撤回解决方案:一键破解微信/QQ/TIM撤回限制完全指南

终极防撤回解决方案:一键破解微信/QQ/TIM撤回限制完全指南

终极防撤回解决方案:一键破解微信/QQ/TIM撤回限制完全指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcod…

2026/7/18 8:25:12 阅读更多 →
如何三分钟掌握猫抓:浏览器视频嗅探的终极解决方案

如何三分钟掌握猫抓:浏览器视频嗅探的终极解决方案

如何三分钟掌握猫抓:浏览器视频嗅探的终极解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经在网上发现一个精彩的视频…

2026/7/18 8:25:12 阅读更多 →
Codex CLI本质是多模型路由中枢,非OpenAI客户端

Codex CLI本质是多模型路由中枢,非OpenAI客户端

1. Codex CLI不是“另一个OpenAI客户端”,而是模型路由中枢 Codex CLI这个名字容易让人误以为它只是个简化版的OpenAI命令行工具——就像curl封装一层、加个 --model gpt-4o 就完事。但实际翻过它的源码结构、跑通本地调试链路、对比过它和 openai-cli 、 llm …

2026/7/18 8:24:11 阅读更多 →

日新闻

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:38 阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:38 阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:38 阅读更多 →

周新闻

月新闻