holen Ich habe einen Service, was mehrmals von vielen meiner Angular 2-Komponenten verwendet wird. Es holt Kundendaten aus einer Web-API und gibt einen beobachtbaren:Daten einmal mit Observables in Angular 2
getCustomers() {
return this.http
.get(this.baseURI + this.url)
.map((r: Response) => {
let a = r.json() as Customer[];
return a;
});
}
ich spritze diesen Dienst in meiner Stammkomponente und in jeder Komponente, die die Kunden zugreifen möchte ich abonnieren Sie beobachtbare:
this.customerService.getCustomers().subscribe(v => this.items = v);
Jede Komponente, die mein Observable abonniert, verursacht jedoch eine andere Ausführung der HTTP-Anfrage. Aber die Daten nur einmal zu holen ist genug. Wenn ich Aktie versuchen(), ist es nicht mein Problem lösen:
getCustomers() {
return this.http
.get(this.baseURI + this.url)
.map((r: Response) => {
let a = r.json() as Customer[];
return a;
}).share();
}
Immer noch das gleiche Problem. Irgendwelche Vorschläge, welche Operatoren ich verwenden muss, um nur Daten einmal zu holen?
Mit ein wenig Modifikation funktioniert das. Sie müssen daran denken, dass innerhalb Ihres Versprechens nur ein Observable erstellt, aber nicht abonniert wird. Ihre Lösung funktioniert also nur, wenn Sie dieses erstellte Observable abonnieren und im Abonnement "resolve ..." aufrufen. – David
@David Wie bist du dazu gekommen? –
@NickDeBeer, ich habe meine Antwort aktualisiert. –