我採用了棱角分明,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