Ich versuche Angular2.
Ich habe festgestellt, dass der http-Dienst das Objekt Observable
anstelle von Promise
verwendet (mir gefällt diese Auswahl nicht sehr. async
/await
treffen ein).
In meinem Dienst lade ich eine Liste von Plants
vom Webservice herunter. Durch Anklicken einer Anlage zeige ich die Details anhand des Arbeitsplans. Aber auf diese Weise werden die Pflanzen, wenn ich zurückgehe, erneut heruntergeladen (weil der Konstruktor erneut aufgerufen wird).
Um dies zu vermeiden, möchte ich Folgendes tun:
public getPlants(): Observable<Plants[]>
{
if (this._plants != null)
return Observable.fromResult (this._plants); //This method does not exists
return this._http.get('../../res/heroes.json')...
}
Gibt es eine Möglichkeit, das zu tun? Wie kann ich die Klasse Observable
in meine ts-Datei importieren?
Vielen Dank!
Die Methode in TypeScript (oder JavaScript) heißt of
. Learn rxjs hat auch ein nettes Tutorial
Wenn Sie rxjs6 verwenden, erhalten Sie alles von rxjs
import { Observable, of } from 'rxjs';
public getPlants(): Observable<Plant[]> {
const mocked: Plant[] = [
{ id: 1, image: 'hello.png' }
];
// returns an Observable that emits one value, mocked; which in this case is an array,
// and then a complete notification
// You can easily just add more arguments to emit a list of values instead
return of(mocked);
}
In der vorherigen Version haben Sie den Operator von einem anderen Speicherort importiert
import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';
public getPlants(): Observable<Plant[]> {
const mocked: Plant[] = [
{ id: 1, image: 'hello.png' }
];
return of(mocked);
}
Und zuvor haben Sie es als Erweiterung für die Observable-Klasse importiert
import { Observable } from "rxjs/Observable";
import 'rxjs/add/observable/of';
public getPlants(): Observable<Plants[]> {
// this can be changed to a member variable of course
let mocked: Plants[] = [{
id: 1,
image: "hello.png"
}];
return Observable.of(mocked);
}
Dies ist meine Arbeitslösung:
if (this._heroes != null && this._heroes !== undefined) {
return Observable.create(observer => {
observer.next(this._heroes);
observer.complete();
});
}
Ich hoffe, dass dies die beste Lösung ist.