无法读取未定义的属性(读取“过滤器”)

问题描述 投票:0回答:3

在几个月没有编程的情况下,我试图进入 Angular,并决定编写一个级联下拉菜单。我试图做级联的第二部分,我的代码如下所示:

onSelect(event_type:any){
    this.dropdownListService.getAll().subscribe((res:any)=>{
      this.properties = res['properties'].filter((res:any) => res.event_type == event_type!.value),
      console.log(this.properties);
    })
  }

唯一的问题是我得到了

“错误类型错误:无法读取未定义的属性(读取“过滤器”)”

我不明白,为什么它是未定义的?

javascript angular typescript
3个回答
1
投票

我不明白,为什么它是未定义的?

原因很简单,服务响应是未定义。这就是错误所说的:

“错误类型错误:无法读取未定义的属性(读取“过滤器”)”

这意味着

res['properties']
不是数组,而是未定义的。

您可以添加一个

filter()
运算符:

this.dropdownListService.getAll()
.pipe(
   filter(resp => resp !== undefined && resp !== null)
).subscribe((res:any)=>{

或者正如其他答案所说,有一个条件来检查订阅块。

根据需要使用条件,但最好调试为什么它无法给出响应。


1
投票

只需在

res['properties']?.filter
后添加问号即可。

 onSelect(event_type:any){
        this.dropdownListService.getAll().subscribe((res:any)=>{
          this.properties = res['properties']?.filter((res:any) => res.event_type == event_type!.value),
          console.log(this.properties);
        })
      }

0
投票

您的情况可能发生了 2 个问题。一是

res['properties']
不是 json 数组,另一个是
res['properties']
必须未定义。你可以像下面这样处理,

onSelect(event_type:any){
    this.dropdownListService.getAll().subscribe((res:any)=>{
     if(res['properties'] != undefined && res['properties'].length > 0){
      this.properties = res['properties'].filter((res:any) => res.event_type == event_type!.value),
      console.log(this.properties);
     }
    })
  }
© www.soinside.com 2019 - 2024. All rights reserved.