這是我的事務API響應:如何使用Angular 2 HTTP過濾API響應?
[{
"id": 1,
"description": "Sandwich",
"date": "2017-09-01",
"category": "Take away",
"tags": ["Holidays"],
"amount": -2
},{
"id": 2,
"description": "Wage",
"date": "2017-08-31",
"category": "Wage",
"tags": [],
"amount": 2000
}]
我在我的角度服務下面的代碼:
@Injectable()
export class TransactionsService {
private _transactionssurl = 'app/transactions/transactions.json';
constructor(private _http: Http){}
getTransactions(query = {}): Observable<ITransaction[]> {
return this._http.get(this._transactionssurl)
.map((response: Response) => <ITransaction[]> response.json())
.filter((value: any) => {
console.log(value)
if (query["month"] && transaction["month"].indexOf(query["month"]) === 0) return false;
if (query["category"] && transaction["category"] !== query["category"]) return false;
if (query["tag"] && transaction["tags"].includes(query["tag"])) return false;
return true;
})
.do(data => console.log(data))
.catch(this.handleError);
}
//...
}
你可以在上面看到,我試圖篩選基礎上,通過數據在查詢對象中,例如{month: "2017-09", tag: "Holidays"}
然而,函數參數 - 事務 - 它被傳遞到過濾器函數是整個事務數組,而不僅僅是一個單一的事務對象,這是我的預期 - 我應該如何安排代碼來過濾每個單獨的?我應該在這裏做什麼呢?我見過的大多數例子都是這樣的,所以我試圖複製它們。
您正在調用'Observable.filter',它過濾事件流**,而不是**'Array.filter'。 – jonrsharpe
您正試圖過濾observable(即由observable發出的事件),而不是過濾observable發出的數組元素。在從響應中提取數組後,過濾應該在傳遞給map()的回調函數**內部。 –