当前位置: 首页 > news >正文

TagManagePage:CRUD 标签管理 + 编辑模式

前言

"海风日记"的标签管理页面支持标签的增删改查,通过编辑模式切换标签列表的显示和操作状态。

本文将从TagManagePage.ets源码出发,深入讲解标签管理的 CRUD 实现。


一、标签管理状态

@Entry@Componentstruct TagManagePage{@Statetags:string[]=['海边','美食','旅行','读书','工作','运动','朋友','家人']@StatenewTag:string=''@Stateediting:boolean=false}

二、编辑模式切换

Button(this.editing?'完成':'编辑').height(32).fontSize(14).fontColor(COLOR_AMBER).backgroundColor('rgba(200,149,106,0.10)').borderRadius(16).padding({left:12,right:12}).onClick(()=>{this.editing=!this.editing})

三、标签删除

if(this.editing){Button(){SymbolGlyph($r('sys.symbol.minus_circle')).fontSize(18).fontColor(['#D06060'])}.backgroundColor('transparent').width(36).height(36).onClick(()=>{this.tags.splice(idx,1)this.tags=[...this.tags]// 触发 UI 更新})}

四、标签新增

Row({space:10}){TextInput({placeholder:'添加新标签…',text:this.newTag}).layoutWeight(1).height(44).fontSize(14).placeholderColor(COLOR_TEXT_HINT).backgroundColor('#FFFFFF').borderRadius(CARD_RADIUS).border({width:1,color:'rgba(200,180,140,0.20)'}).padding({left:12,right:12}).onChange((v)=>{this.newTag=v})Button('添加').height(44).fontSize(14).fontColor('#FFFFFF').fontWeight(FontWeight.Bold).backgroundColor(COLOR_PRIMARY).borderRadius(CARD_RADIUS).padding({left:16,right:16}).onClick(()=>{if(this.newTag.trim().length>0){this.tags=[...this.tags,this.newTag.trim()]this.newTag=''}})}

五、CRUD 操作总结

操作方法触发 UI 更新
新增this.tags = [...this.tags, newTag]创建新数组
删除splice + this.tags = [...this.tags]创建新数组
更新直接修改后this.tags = [...this.tags]创建新数组

六、总结

本文通过"海风日记"的标签管理页面,深入讲解了 CRUD 标签管理的实现:

  1. 编辑模式:切换编辑状态
  2. 标签删除:编辑模式显示删除按钮
  3. 标签新增:输入框 + 添加按钮
  4. UI 更新:创建新数组触发渲染

下一篇文章开始进入第九系列:登录与账号体系,敬请期待。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • TextInput 组件文档
  • @State 装饰器文档
  • 海风日记项目源码
  • [HarmonyOS 开发者官网](https://atomgit.com/openharmony/docs
  • 开源鸿蒙跨平台社区
http://www.jsqmd.com/news/1232948/

相关文章:

  • 中级OpenGL教程 022:探秘三维世界的血脉传承——物体父子关系与矩阵递归奥义
  • 深入解析McBSP:从数据通路到采样率生成器的嵌入式通信核心
  • 系统集成项目管理工程师教程(第3版)笔记——第5章:软件工程
  • “TVA-世界模型”架构全景图解析(4)
  • Rive 动画在 uni-app 里只显示不交互?把 State Machine 跑起来
  • 网安课程学习高频翻车点+精准纠错方案(技术向深度复盘)
  • C++类与对象避坑指南:默认成员函数与this指针实战解析
  • 手机号登录页:TextInput 类型 PhoneNumber + 验证码倒计时
  • 为什么你的AI项目总卡在上线前?资深CTO拆解4类典型失败案例,附完整CI/CD流水线配置模板(限前200份)
  • Claude Tag技术解析与开源实现对比
  • 2026年最新教程:建筑像素图怎么做成拼豆 亲测有效方法 - 软件测评小帮手
  • 打卡信奥刷题(3458)用C++实现信奥题 P10488 [BAPC 2006 资格赛] Booksort
  • 宁波经济纠纷:袁勤玮教你3步选对个人律师,经济纠纷/法律顾问/金融纠纷/合同纠纷/公司纠纷,经济纠纷律师找哪个 - 品牌推荐师
  • SpaceMind智能空间:Agent技术进化与场景化应用
  • DeepSeek LeetCode 3630. 划分数组得到最大异或运算和与运算之和 Java实现
  • YOLO部署中的后处理优化:NMS的GPU加速实现与Python层后处理的性能陷阱
  • Unity跨平台文件对话框实战:从原生API到CompactStandaloneFileBrowser
  • mdapy:高效分子动力学分析工具全解析
  • 使用libtcc实现C语言动态编译与JIT技术
  • 本地服务企业网站的内容工程:Next.js、Prisma、SQLite、Docker与GEO实践
  • C++智能仓储系统性能优化:从内存管理到并发重构的工程实践
  • AI时代如何捍卫创作者表达权?ArtArch的创新实践
  • TI eHRPWM寄存器深度解析:从时基到死区的电机控制实战配置
  • 2026实力之选:物流服务公司——高效运输、智能仓储与优质服务实力之选 - 甄选服务推荐
  • 硬件课程设计优化服务的商业价值与技术实践
  • 单片机芯片烧录全流程解析与实战指南
  • UE5光照与阴影实战指南:从核心原理到性能优化
  • 现代C++智能指针与RAII实战指南:从原理到应用场景
  • 3分钟解锁Wand高级功能:告别付费墙的终极方案
  • 多AI协作开发如何避免“自己写、自己审”:Codex、Claude Code与工程验收闭环