2016-01-07 10 views
13

Angular2 çalışıyorum. oluşturmak Gözlemlenebilir <T> sonuçtan

yerine Promise'in http hizmet kullanımı Obserable nesne (Ben çok bu seçimi sevmiyorum .. asyc/bekliyoruz geliyorsanız) fark ben webcoder Bitkilerin bir listesini indirmek benim hizmetinde

. Bir tesisi tıklatarak yönlendirme kullanarak ayrıntıları gösteriyorum. Ancak bu şekilde geri döndüğümde, bitkiler tekrar indirilir (kurucunun tekrar çağrılması gerekir). Bunu yapmanın bir yolu var mı

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

:

ben böyle bir şey yapmak istiyorum Bunu önlemek için? Gözlemlenebilir sınıfı ts dosyasımda nasıl alabilirim?

Teşekkürler!

+0

sadece angular2 çalışıyorsanız, ben (eğer [aurelia] vermek önerebilir http://aurelia.io/docs.html#/aurelia/framework/1.0.0 -beta.1.0.7/doc/article/getting-start) denemek? Bir örnek görmek için "httpclient" için ctrl-f. İstediğiniz gibi bir söz verir. – MikeSW

+0

, Observable.just' gibi bir şey olmamalıdır? (başka dillerde de denir) – njzk2

cevap

16

Bu benim çalışma çözümdür: Bu en iyi çözümdür umut

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

.

+0

Bu mükemmel. Bu bana çok zaman kazandı; Teşekkürler! – b264

+0

iyi bir adam;) –

+0

değişken/parametre 'gözlemcisinin türü nedir? –

12

TypeScript'teki yöntem (veya bu konuyla ilgili JavaScript) yöntemi of olarak adlandırılır. Web paketi gibi bir modül paketi kullanıyorsanız, operatörü de içe aktarmanız gerekir; yorumlarda SergioL kredisi.

Örnek:

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); 
} 
+2

Ben de 'import' rxjs/add/observable/'' 'öğesini eklemem gerektiğini buldum. – SergioL

+2

Ayrıca, tüm operatörleri tek tek eklemek istemiyorsanız, 'rxjs/Rx' öğesinden de içe aktarma yapabilirsiniz. – LoganMzz