Создать Наблюдаемый <T> из результата

Я пытаюсь Angular2.

Я заметил, что служба http использует объект Obserable вместо Promise (мне не нравится этот выбор.. asyc/wait прибывают)

В моем сервисе я загружаю список Растений из webservice. Нажимая на растение, я показываю детали, используя маршрутизацию. Но таким образом, когда я возвращаюсь, растения снова загружаются (потому что конструктор снова вызван).

Чтобы этого избежать, я хочу сделать что-то вроде:

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')...
}

Есть ли способ сделать это? Как импортировать класс Observable в файл ts?

Спасибо!

Ответ 1

Это мое рабочее решение:

if (this._heroes != null && this._heroes !== undefined) {
    return Observable.create(observer => {
        observer.next(this._heroes);
        observer.complete();
    });
}

Я надеюсь, что это лучшее решение.

Ответ 2

Метод в TypeScript (или JavaScript, если на то пошло) называется of. Если вы используете набор модулей, например webpack, вам также нужно импортировать оператора; cred SergioL в комментариях.

Пример:

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"
    }];
    // 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 Observable.of(mocked);
}