У меня есть служба, которая вызывает API следующим образом:
return this._http
.post(appSettings.apiUrl + 'SomeController/SomeAction', params, {withCredentials: true, headers: this.headers})
.timeoutWith(appSettings.maxTimeHttpCalls, Observable.defer(() => Observable.throw(this._feedbackService.timeout())))
.map((response: Response) => response.json().data);
Теперь я хочу реализовать функцию фильтра для этого вызова, используя rxjs/add/operator/filter
, но я не могу заставить ее работать должным образом.
Это подход, который я выбрал:
return this._http
.post(appSettings.apiUrl + 'SomeController/SomeAction', params, {withCredentials: true, headers: this.headers})
.timeoutWith(appSettings.maxTimeHttpCalls, Observable.defer(() => Observable.throw(this._feedbackService.timeout())))
.filter(response => response.json().data.Type === 5)
.map((response: Response) => response.json().data);
Но независимо от того, что я фильтрую, цикл ngFor
ничего не производит, пока там находится фильтр. Если я удалю его, все будет работать как положено.
Я должен добавить фильтр до или после map
?
Могу ли я фильтровать ответ JSON таким образом или мне нужно использовать другой синтаксис?
Пример JSON
Вот пример того, как выглядит ответ JSON:
data: [
{
"Type": 5,
"Description": "Testing",
"ID": "001525"
}
]
data.Type === 5
, так иdata.ID === '001525'
, но оба терпят неудачу. 18.10.2016data
— это массив объектов, ноmap((response: Response) => response.json().data)
возвращает его как один большой массив, который затем передается в фильтр. Итак, вы хотите повторить результат и вернуть только объекты, гдеdata.Type === 5
? 18.10.2016Property 'Type' does not exist on type '{}'
, когда делаю это внутри инструкции фильтра. 18.10.2016item['Type']
или определить правильный тип в.filter(item:Whatevertypeitis => ...
18.10.2016