如何检查places变量不为null?

时间:2019-01-17 10:03:11

标签: angular typescript

我尝试使用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

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

有两种简单的可能性: 1)在返回null之前检​​查,否则返回空数组:

return this.places ? this.places.filter(places => places.name.toLowerCase().includes(filterValue)) : [];

2)默认将位置设置为空数组:

places:Place[] = [];

答案 1 :(得分:0)

enter image description here

因此,我尝试检查长度,但这会导致一些错误,然后尝试检查不为null或未定义的位置,但这是由于filter()上的相同错误而导致的:

enter image description here

 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)

请告诉我是否有帮助。谢谢:)