【发布时间】:2017-09-03 19:51:40
【问题描述】:
这是我的交易 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
}]
我的 Angular 服务中有以下代码:
@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。 -
您正在尝试过滤可观察对象(即可观察对象发出的事件),而不是过滤可观察对象发出的数组元素。从响应中提取数组后,过滤应该在内部传递给 map() 的回调函数中。
标签: angular angular2-http