我尝试使用Angular Material自动完成功能,但是出现一个错误。错误是
: ERROR TypeError: Cannot read property 'filter' of undefined
我认为,问题是在应用过滤器时place[]
为空。我不知道该怎么解决。
数据进入PHP后端。
This is my TS file: https://pastebin.com/cAA3ycAA
And this is my template: https://pastebin.com/cxBnr5WU
感谢您的帮助。
答案 0 :(得分:1)
有两种简单的可能性: 1)在返回null之前检查,否则返回空数组:
return this.places ? this.places.filter(places => places.name.toLowerCase().includes(filterValue)) : [];
2)默认将位置设置为空数组:
places:Place[] = [];
答案 1 :(得分:0)
因此,我尝试检查长度,但这会导致一些错误,然后尝试检查不为null或未定义的位置,但这是由于filter()上的相同错误而导致的:
ngOnInit(
) {
this.getStudents();
this.getPlaces();
if(!this.places || this.places!==null)
{
this.filteredOptions = this.place.valueChanges
.pipe(
startWith(''),
map(value => this._filter(value))
);
}
}
答案 2 :(得分:0)
请很好地检查您的代码,因为我可以看到您在一个语句中使用了places
,然后在声明了place
的另一条语句中使用了this.place.valueChanges
答案 3 :(得分:0)
请检查代码的这一部分。
{{option.name}}
首先,您只需将option.name替换为 option 。
然后在这段代码中。
private _filter(值:字符串):Place [] { const filterValue = value.toLowerCase(); 返回this.places.filter(places => places.name.toLowerCase()。includes(filterValue)); }
A。尝试将Place []替换为string []。
B。代替.includes(filterValue),请尝试
返回this.places.filter(places => place.name.toLowerCase()。indexOf(value.toLowerCase())=== 0)
请告诉我是否有帮助。谢谢:)