在几个月没有编程的情况下,我试图进入 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);
})
}
唯一的问题是我得到了
“错误类型错误:无法读取未定义的属性(读取“过滤器”)”
我不明白,为什么它是未定义的?
原因很简单,服务响应是未定义。这就是错误所说的:
“错误类型错误:无法读取未定义的属性(读取“过滤器”)”
这意味着
res['properties']
不是数组,而是未定义的。
您可以添加一个
filter()
运算符:
this.dropdownListService.getAll()
.pipe(
filter(resp => resp !== undefined && resp !== null)
).subscribe((res:any)=>{
或者正如其他答案所说,有一个条件来检查订阅块。
根据需要使用条件,但最好调试为什么它无法给出响应。
只需在
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);
})
}
您的情况可能发生了 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);
}
})
}