Ich habe 2 Komponenten - object-list
und search-filter
in meiner App. Auch ich habe eine fetch-service
mit getObjects(page, filter)
Methode. Ich möchte ein Szenario implementieren, wo object-list
ruft alle Daten über getObjects
Methode und dann search-filter
wird einige Filter auf getObjects
anwenden und object-list
sollte automatisch aktualisieren. Hier ist ein Code:Teilen und aktualisieren Observable Daten in Angular 2
FetchService
objects: Observable<any>;
getObjects(page: number, filter): void {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
const offset = (page - 1)* this.pageSize;
let url = this.objectsBaseUrl;
//apply filter
if (filter) {
url = `${url}?filter=${JSON.stringify(filter)}`
}
this.objects = this.http.get(url)
.map((response: Response) => {
return response.json() || {}
})
.catch(this.handleError);
}
ObjectListComponent
constructor(private fetch: FetchService) {}
ngOnInit(): void {
this.fetch.getObjects(this.initialPage);
this.objects = this.fetch.objects; // I need an Observable object to use with async pipe with *ngFor
}
getPage(page: number) {
this.fetch.getObjects(page); //here this.objects variable probably should be update because this methods replaces this.fetch.objects
}
Suchfilter
constructor(private fetch: FetchService) {}
apply() {
//some filter calculations
this.fetch.getObjects(1, this.filter);
}
Ich benutze subscribe
nicht zu objects
, weil ich es in asynchrone Leitung in *ngFor
setze. Aber soweit es mich betrifft async Rohr verwendet subscribe
innen. Das Problem ist, dass die Liste nur einmal aktualisiert wird, wenn ngOnInit
ausgelöst wird. Was läuft falsch?
Ihr Ansatz unterscheidet sich von meinem und es brauchte einige Zeit zu implementieren, aber es funktionierte für mich! –
Froh, das zu hören, herzlichen Glückwunsch! – AngularChef