【问题标题】:Angular 6 - cannot read property of null, using a filter methodAngular 6 - 无法读取null的属性,使用过滤器方法
【发布时间】:2019-02-02 22:03:30
【问题描述】:

对 Angular 很陌生,所以这可能是一个简单的问题!

我有一个observable,它返回了objects 的列表。

这些objects 有一个可选的property,我正在尝试根据property 过滤objects 的列表。

getPersonWithHouse(houseID: string): Person[] {
  this.myService.getPersons().subscribe(persons => {
     this.personsWithHouse = persons.filter(person => {
         if (person.house) return person.house.id === houseID;
     });
   });
 return this.personsWithHouse;
}

所以基本上在这个函数中,我将房子作为参数,然后订阅所有人员的列表,并将该房子中的所有人员保存在一个变量中。

我不断收到"cannot read property "ID" of null"

还有一个"not all code paths return a value",但这是因为我放了一个If,没有else,但我不知道我可以放什么else

我该如何解决这个问题?主要问题是,如果每个person 都有一个house,这会起作用,但是由于house 属性是可选的,一些persons 没有,所以我得到了这个错误

谢谢

【问题讨论】:

  • “但我不知道我还能放什么”在 if 语句之后加上 return false;
  • "cannot read property "ID" of null" 似乎是其他地方的问题,因为在您的代码中没有“ID”,我的意思是大写。
  • 谢谢你的输入,我只是写错了大写!问题已通过以下解决方案解决,返回 false;

标签: angular filter observable


【解决方案1】:

添加另一个条件

if (person.house && person.house.id) return person.house.id === houseID;
return false;

【讨论】:

  • 谢谢,这似乎解决了这个问题,没想到把return false,我一直试图返回我从订阅中得到的对象
  • 没问题。如果这有帮助,请务必检查作为答案
【解决方案2】:

试试这个 -

persons.filter((person) => person.house && person.house.id && (person.house.id === houseID));

【讨论】:

    猜你喜欢
    • 2020-02-20
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2016-05-22
    • 1970-01-01
    • 2021-11-14
    • 2018-09-02
    相关资源
    最近更新 更多