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字符串会导致后续列表渲染报错。
修复步骤
- 修改复选框模板的事件调用,同时传递事件对象和当前遍历的特征项:
<mat-checkbox name="aType.allgemeinesMerkmal.bezeichnung" [checked]="checkAll(char.bezeichnung)" (change)="addToList($event, char)" > {{char.bezeichnung}} </mat-checkbox>
- 重写
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 ); } }
- 优化接口订阅逻辑,删除重复的接口调用:
你原有代码里连续调用了两次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
相关产品推荐
相关产品推荐

