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 更新:创建新数组触发渲染

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

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


相关资源:

相关推荐
郝学胜_神的一滴2 小时前
C++20 高级编程 001:从极简HelloWorld到现代类型体系全梳理
c++·后端
卷无止境2 小时前
FastAPI中间件全解析:请求处理链条上的隐形关卡
后端·python·fastapi
badhope2 小时前
MCP协议:号称要统一AI工具调用,但大多数人连第一步都走不对
后端·架构
思考着亮2 小时前
2. Redis 缓存实战
后端
晚安code2 小时前
Java 并发编程必会的 JUC 辅助类:从 Callable 到阻塞队列
后端
叱咤月海鱼鱼猫2 小时前
后端生成图片传递到前端
后端
长栎3 小时前
你写的 AI 品控规则三个月就过期——不是规则错了,是你没给它做"回归测试"
后端
沙湖遇雨3 小时前
7.EventLoop 生命周期
后端
雨落倾城夏未凉3 小时前
halcon核心-模板匹配定位(二)
后端
ma_king3 小时前
Spring Boot 接入飞书自定义机器人
java·后端