Rozpoczynam mój projekt z Angular2, a programiści wydają się zalecać RXJS Observable zamiast Promises.Prosty filtr na macie RXJS Observable
Osiągnąłem, aby pobrać listę elementów (eposów) z serwera. Ale jak mogę filtrować elments, używając na przykład identyfikatora?
Poniższy kod jest ekstrakcją z mojej aplikacji i pokazuje teraz ostateczne rozwiązanie robocze. Miejmy nadzieję, że to pomoże komuś.
@Injectable()
export class EpicService {
private url = CONFIG.SERVER + '/app/'; // URL to web API
constructor(private http:Http) {}
private extractData(res:Response) {
let body = res.json();
return body;
}
getEpics():Observable<Epic[]> {
return this.http.get(this.url + "getEpics")
.map(this.extractData)
.catch(this.handleError);
}
getEpic(id:string): Observable<Epic> {
return this.getEpics()
.map(epics => epics.filter(epic => epic.id === id)[0]);
}
}
export class EpicComponent {
errorMessage:string;
epics:Epic[];
epic:Epic;
constructor(
private requirementService:EpicService) {
}
getEpics() {
this.requirementService.getEpics()
.subscribe(
epics => this.epics = epics,
error => this.errorMessage = <any>error);
}
// actually this should be eventually in another component
getEpic(id:string) {
this.requirementService.getEpic(id)
.subscribe(
epic => this.epic = epic,
error => this.errorMessage = <any>error);
}
}
export class Epic {
id: string;
name: string;
}
Z góry dziękuję za pomoc.
Wygląda prosto, ale: Błąd: (33, 42) TS2365: Operator '===' nie może być zastosowany do typów 'string' i 'number'. Uaktualnię pytanie, aby pokazać cały komponent i relację serwisową. – Johannes
Jeśli tak, to możesz po prostu przekonwertować ciąg znaków na liczbę lub liczbę na ciąg znaków :) –