TypeError: Cannot read property 'name' of undefined
输入字段
<input type="text" placeholder="Pick one" aria-label="Number" matInput [formControl]="name" [matAutocomplete]="auto">
自动填充HTML
<mat-autocomplete #auto="matAutocomplete">
<div *ngIf="filteredOptions" >
<mat-option *ngFor="let person of filteredOptions | async" [value]="person.name">
{{person.name}}
</mat-option>
</div>
</mat-autocomplete>
名称和基础被视为FormControl:
filteredOptions: Observable < string[] > ;
ngOnInit() {
this.filteredOptions = this.name.valueChanges.pipe(map(val => this.filter(
val)));
}
filter(val: string): string[] {
var filteredData = [];
if (this.persons) {
for (var i = 0; i < this.persons.length; i++) {
if (this.basis.value === "name" || this.basis.value === "" || this.basis
.value === undefined || this.basis.value === null) {
if (this.persons[i].name.toLowerCase().indexOf(this.name.value.toLowerCase()) !==
-1) {
filteredData[i] = this.persons[i];
}
} else if (this.basis.value === "id") {
if (this.persons[i].id.toLowerCase().indexOf(this.name.value.toLowerCase()) !==
-1) {
filteredData[i] = this.persons[i];
}
}
}
return filteredData;
}*
答案 0 :(得分:0)
问题源于以下行,该行在某些条件下使filteredData
数组填充undefined
值:
filteredData[i] = this.persons[i];
在filter
方法的开头,filteredData
是一个空数组。然后检查persons
数组是否匹配,如果找到匹配,则将其添加到与filteredData
数组中相同位置的persons
数组中:{{1} }。
为什么会有问题?假设filteredData[i] = this.persons[i];
数组的前两个元素不匹配;第三个是比赛。因此,persons
数组的第三个元素被赋值给空persons
数组的第三个位置。
在Javascript中,当您为高于数组大小的位置指定值时,数组会被filteredData
填充。
示例:
undefined
改为使用const array = [];
array[3] = 'test';
console.log(array[0]); // => undefined
。