我对Angular很新,并且关注了Pluralsight的课程。在尝试显示某个项目的详细信息时,我似乎无法弄清楚如何根据ID过滤我正在从文件中检索的项目列表。
我有获取数据的服务,在那里我有检索所有项目的方法
private _productUrl = './api/products/products.json';
getProducts(): Observable<IProduct[]>{
return this._http.get<IProduct[]>(this._productUrl)
.do(item => console.log(JSON.stringify(item)))
.catch(this.handleError);
};
相当简单,试图将我的头围绕在promises,observables等上。我无法弄清楚的是如何在内存中检索列表并仅返回与给定id匹配的元素。
getProduct(id: number): IProduct{
this._http.get<IProduct>(this._productUrl).do(item => {if (item.productId == id) return item;});
return null;
}
我收到了null
值。那么如何从get
调用中查看并过滤列表返回?
答案 0 :(得分:2)
在flatMap运算符之后使用rxjs Filter运算符:
.flatMap(item => item)
.filter(item => item.productId === id)
然后订阅只会解决此项目。
在您的组件中,然后:
public selectedItem: IProduct;
public ngOnInit() {
service.getProduct(id).subscribe(item => this.selectedItem = item);
}
或使用异步管道: 在组件中:
public item$: Observable<IProduct>;
public ngOnInit() {
this.item$ = service.getProduct(id);
}
在模板中:
<cmp product="item$ | async"></cmp>