我采用了棱角分明,NGRX /存储的即时访问和rxjs获取到观察数据
所以我有一个车减速和项目减速。
当我从API中提取项目时,我需要知道它们是否已经在购物车中。
所以,因为我已经实现了分页,我认为最好的方式是检查在实际的服务中获取Items并在Items对象内创建一个InCart字段。
我不想在订阅中这样做,因为当我提取项目时,我不会更改购物车状态,因此订阅将永远不会被调用。如果我使用地图 ,我也无法访问服务中的数据。
所以我真的不知道如何以'最佳实践方式'来做到这一点。
也许我也可以以旧的方式将购物车对象保存在购物车服务中,但我认为这不是最好的做法。
下面的这段代码对我来说是理想的情况。 (但是这OFC不工作,因为我无法访问使用拔毛或地图车对象。)
getItems(): Observable<Item[]> {
return this.http.get(url)
.map(this.extractData)
.map(this.extractItemlist)
.catch(this.handleError)
}
private extractItemlist(res: ApiResponse) {
switch (res.response.type) {
case ApiResponse.TYPE.ERROR:
throw res.response.data.message
case ApiResponse.TYPE.SUCCESS:
this.checkIfItemsAreInCart(res.response.data.list)
return res.response.data.list
}
}
private checkIfItemsAreInCart(items: Item[]) {
const cart = this.store.select<CartState>('cart').pluck('cart')
for (const item of items) {
for (const cartItem of cart.items) {
if (item.details.item_id === +cartItem.item_id) {
item.inCart = true
} else {
item.inCart = false
}
}
}
}
有没有人对如何实现这一想法?我对这个可观察的东西很陌生,所以可能这就是为什么我仍然没有想出一个好的解决方案。
我真的很感谢一些帮助。
最佳做法是不使用'pluck'而不将字符串传递给'select';看到[这个答案](https://stackoverflow.com/a/44510829/6680611)。而且,关于同步访问商店,请参阅[本答案](http://stackoverflow.com/a/42706832/6680611)。 – cartant