wake-up-neo.com

Erzeuge Observable <T> aus result

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!

30
user3471528

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);
}
44
Patrick

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.

26
user3471528