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

前言

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

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


一、标签管理状态

typescript 复制代码
@Entry
@Component
struct TagManagePage {
  @State tags: string[] = ['海边', '美食', '旅行', '读书', '工作', '运动', '朋友', '家人']
  @State newTag: string = ''
  @State editing: boolean = false
}

二、编辑模式切换

typescript 复制代码
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 })

三、标签删除

typescript 复制代码
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 更新
  })
}

四、标签新增

typescript 复制代码
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 更新:创建新数组触发渲染

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

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


相关资源:

相关推荐
IT_陈寒19 小时前
Redis过期key的坑,差点让线上服务崩了
前端·人工智能·后端
月落归舟19 小时前
谈谈SpringMVC底层原理
后端·springmvc
夕除19 小时前
请求区别及app网站区别
后端
w1395485642219 小时前
鸿蒙原生开发手记:徒步迹 - 图片加载与缓存优化
后端
程序员爱钓鱼20 小时前
Rust 数组 Array 详解:定义、访问、遍历与切片
后端·rust
前端工作日常1 天前
我学习到的Java类和对象区别
java·后端
前端工作日常1 天前
我学习到的Java类完整结构
java·后端
Csvn1 天前
📊 SQL 入门 Day 6:多表查询 — JOIN 的四种姿势
后端·sql
hold?fish:palm1 天前
RDB全量快照备份
c++·redis·后端