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

Angular使用mat-checkbox触发reading 'checked'未定义报错如何解决

问题原因
  • 你使用的Angular Material mat-checkbox 组件的change事件输出的是自定义的MatCheckboxChange对象,不存在原生事件的target属性,所以event.target取值为undefined,访问undefined.checked就触发了对应报错。
  • 额外隐藏问题:你没有给mat-checkbox绑定value属性,就算event.target存在,event.target.value也拿不到你需要的特征值,而且aType数组的元素是固定嵌套结构,直接push字符串会导致后续列表渲染报错。
修复步骤
  1. 修改复选框模板的事件调用,同时传递事件对象和当前遍历的特征项:
<mat-checkbox 
  name="aType.allgemeinesMerkmal.bezeichnung" 
  [checked]="checkAll(char.bezeichnung)"
  (change)="addToList($event, char)"
> 
  {{char.bezeichnung}} 
</mat-checkbox>
  1. 重写addToList方法,正确读取勾选状态,同时构造符合aType结构的对象存入数组:
    首先先导入事件类型(如果未导入的话):
import { MatCheckboxChange } from '@angular/material/checkbox';

然后修改方法逻辑:

addToList(event: MatCheckboxChange, char: any){
  if(event.checked){
    // 构造和接口返回结构一致的对象后再push
    this.aType.push({
      allgemeinesMerkmal: {
        bezeichnung: char.bezeichnung
      }
    });
  } else {
    // 可选:取消勾选时删除对应条目,符合交互逻辑
    this.aType = this.aType.filter(
      item => item.allgemeinesMerkmal.bezeichnung !== char.bezeichnung
    );
  }
}
  1. 优化接口订阅逻辑,删除重复的接口调用:
    你原有代码里连续调用了两次getTypeId,完全冗余,修改为:
//Allgemeine Merkmale
this.route.params.subscribe(params => {
  const id = params['id'];
  this.amService
  .getTypeId(id)
  .subscribe(data => { 
    this.aType = data; 
    console.log(this.aType);
    this.checkboxesLoaded = true;
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:15:01