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

Angular Material复选框问题:将选中项值存入数组

Angular Material复选框选中值存入数组解决方案

问题原因

你碰到的类型错误,是因为dynamColumns.value返回的是包含所有表单控件键值对的对象,不是单个布尔值,直接拿它和true比较肯定会类型不兼容。

修复步骤

1. 修正表单控件名拼写(重要)

你的HTML里第一个复选框的formControlName写的是nome,但TS代码里表单组定义的是name,两者不一致会导致这个复选框无法正确绑定,先把HTML里的nome改成name:

<mat-checkbox color="primary" formControlName="name">Name</mat-checkbox>

2. 修改onSave方法筛选选中项

在TS文件的onSave方法里,通过遍历表单值的键值对,筛选出值为true的键,存入columns数组:

onSave() {
  // 断言表单值类型,确保每个值都是布尔型(初始化时设为false,不会为null)
  const formValues = this.dynamColumns.value as { [key: string]: boolean };
  
  // 筛选并收集选中的列名
  this.columns = Object.entries(formValues)
    .filter(([_, isChecked]) => isChecked)
    .map(([columnName]) => columnName);
  
  console.log('选中的列:', this.columns);
  // 这里可以添加保存逻辑,比如把columns传递给父组件或者存入本地存储
}

另一种简洁写法

如果觉得Object.entries麻烦,也可以用Object.keys实现:

onSave() {
  const formValues = this.dynamColumns.value as { [key: string]: boolean };
  this.columns = Object.keys(formValues).filter(key => formValues[key]);
}

这样处理后,点击Save按钮时,columns数组就会自动存入所有被选中的复选框对应的键名(比如name、surname)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:37:02