You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Angular从枚举生成复选框并获取选中的枚举值

解决Angular枚举生成复选框无法获取枚举值的问题

问题分析

你通过Object.values(Tags)获取枚举值数组生成复选框,但getHeroByTags方法无法正确拿到枚举值,核心原因是依赖事件对象取值的方式不够直接,或是未正确从事件对象中提取目标值。

方案一:直接传递枚举值(推荐)

无需通过事件对象,直接将循环中的tag作为参数传入方法,代码更简洁直观:

HTML模板修改

<li *ngFor="let tag of tagsText">
   <label>
      <input type="checkbox" (click)="getHeroByTags(tag)" [value]="tag"/>
      {{tag}}
   </label>
</li>

这里把(click)的参数改为tag,同时用属性绑定[value]="tag"替代插值语法,保持值的类型一致性。

组件方法修改

getHeroByTags(selectedTag: Tags) {
  // 直接使用selectedTag,已为枚举类型
  console.log('选中标签:', selectedTag);
  // 后续业务逻辑处理
}

方案二:通过事件对象获取值

如果坚持使用$event,需要正确从事件目标中提取value并转换为枚举类型:

HTML模板修改

<li *ngFor="let tag of tagsText">
   <label>
      <input type="checkbox" (click)="getHeroByTags($event)" [value]="tag"/>
      {{tag}}
   </label>
</li>

组件方法修改

getHeroByTags(event: MouseEvent) {
  const target = event.target as HTMLInputElement;
  const selectedTag = target.value as Tags;
  console.log('选中标签:', selectedTag);
  // 后续业务逻辑处理
}

需将event.target断言为HTMLInputElement才能正确访问value属性,再将字符串值转换为Tags枚举类型。

额外说明

你的Tags属于字符串枚举,Object.values(Tags)会直接返回枚举的字符串值数组,两种方案都能正确获取对应枚举值,优先推荐方案一,避免不必要的类型断言操作。

内容的提问来源于stack exchange,提问作者rheza 555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:04:54