Angular2-Komponente zeigt ein Objekt an. Zusätzlich zu den Basisobjekt-Informationen müssen zusätzliche Daten über einen Dienst geladen werden, der Observable zurückgibt und ziemlich langsam ist.Laden von langsamen Unterressourcen in Angular2
Basisteil des Objekts Informationen sollten sofort und die zusätzlichen Daten einmal vorhanden angezeigt werden.
Etwas wie folgt:
SomeObjectComponent {
someObject: SomeObject;
extraData: ExtraData;
@Input()
set item(v: SomeObject) {
this.someObject = v;
backendService.getExtraData(v.id)
.subscribe(d => this.extraData = d);
}
}
// in the template
<some-object [item]="currentlySelected"></some-object>
Beim Laden langsam und Benutzer navigiert zwischen verschiedenen Werten von SomeObject
kann asynchroner Laden laden und zu falschen extraData
für den aktuellen Eintrag zuweisen.
Was wäre der beste Weg, dies zu lösen? Was passiert, wenn jedes Mal mehrere zusätzliche Datenelemente geladen werden müssen (und jedes, sobald es geladen wird)?
Ich verstehe das Problem nicht vollständig. Wenn Sie also navigieren, wird die gleiche Komponente geladen und verschiedene "Items" übergeben. Ich nehme an, Sie möchten eine Anfrage abbrechen, wenn die Daten bei der Navigation zu einem anderen Artikel noch nicht angekommen sind. Was, wenn Sie zurück navigieren? Ich nehme an, Sie möchten das Objekt aus einem Cache holen (aus der vorherigen Anfrage). Ich würde einen Service erstellen, der sicherstellt, dass zuvor geladene Artikel sofort verfügbar sind. Zum Beispiel wie in http://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share-the-result-of-an-angular-2-http-network-call-in gezeigt –
Cache löst das ursprüngliche Problem nicht. Nur eine einzige SomeObjectComponent-Instanz wird hier initiiert und dann ändert sich der Wert der Eigenschaft "currentSelected" des Containers und wird über die [item] -Bindung weitergegeben. Eine Lösung würde Subskription speichern und abbrechen, eine andere nach "this.someObject === v" innerhalb von subscribe suchen. Ich wollte wissen, welche Optionen und welche die besten sind, vor allem, wenn wir mehrere zusätzliche Datenelemente haben. Gibt es hier eine magische RxJS-Lösung? –
Ok, das macht es klarer.Cache löst das ursprüngliche Problem nicht, aber ich war neugierig, ob dies auch eine Voraussetzung ist. –