尝试过滤 Observable List 中的对象列表。
型号:
export class Month {
id: string;
description: string;
}
值:
描述:“一月” 编号:“01”
描述:“二月” 编号:“02”
描述:“三月” 编号:“03”
在我的服务中,我尝试返回一个包含选定值的列表,在这种情况下只有一个,但将来可能会更多。
selectedMonth: string = "02";
public getMonths(): Observable<Month[]> {
return of(this.MONTHS).pipe(
map(months => {
months.filter(month => {
month.id === this.selectedMonth;
});
return months;
})
);
}
但似乎过滤器根本不起作用,我总是得到整个列表(12 个元素,而不是一个元素)
ngOnInit(): void {
this.monthservice.getMonths().subscribe(months => (this.months = months));
console.log(this.months);
}
这个链接有代码:
https://stackblitz.com/edit/angular-myfilter?file=src/app/services.ts/month.service.ts
有什么帮助吗?
谢谢
答案 0 :(得分:1)
推荐使用最短形式:
public getMonths(): Observable<Month[]> {
return of(this.MONTHS).pipe(
map(months => months.filter(month => month.id === this.selectedMonth))
);
}
答案 1 :(得分:0)
这是因为您返回的不是过滤后的数组,而是原始数组。
public getMonths(): Observable<Month[]> {
return of(this.MONTHS).pipe(
map(months => {
return months.filter(month => month.id === this.selectedMonth);
})
);
}
答案 2 :(得分:0)
问题是你的地图功能。您的 map 函数正在执行一些操作,但没有返回任何对象。你必须返回一个对象:
map(months => {
let filteredM = months.filter(month => {
month.id === this.selectedMonth;
});
return filteredM;
})
但是map函数的作用是改变详细源的类型,在这种情况下,源和结果具有相同的类型,所以在这种情况下,您可以只使用过滤器函数而没有映射。