2016-03-09 23 views
6

Ich habe derzeit ein Problem mit Angular2 und Observable-Objekt.Observable fromArray

Ich habe eine Komponente, die einen Service anruft: eine echte Verbindung mit einer API und einer gefälschten.

Der Dienst an die API verknüpft funktioniert gut, aber wenn ich die gefälschten verwenden, mag ich ein Array von beobachtbaren Objekt zurückgeben, aber ich habe diesen Fehler: „Observable_1.Observable.fromArray ist keine Funktion“

hier ist mein Code:

Komponente:

this._raceService.list().subscribe(newRaces => { 

    this.races = newRaces; 
}); 

Echt Service:

list(){ return this._http.get('http://dev.backend.com/api.php', options).map(res => res.json()); } 

Fake-Service:

list() { return Observable.fromArray([{ name: 'London' }]); } 

Können Sie mir helfen plz?

Prost

Antwort

18

sollte sein, dass ...

Rx.Observable.from(yourarray) 

fromArray scheint

+1

Danke, aber wenn ich beobachtbare verwenden.von Ich habe dies bei der Kompilierung: Fehler TS2346: Gelieferte Parameter stimmen mit keiner Signatur des Aufrufziels überein. Und wie Rx.Observable zu verwenden, wenn Rx kein exportiertes Mitglied hat? – intuix

+0

ist das ein Typoskript Fehler in Bezug auf die List-Methode Signatur? brauchst du vielleicht list(): any {... –

+0

Bekomme es nicht was list() tun soll? Liste ist keine Observable-Eigenschaft. Ich brauche eine Methode von einem Observable-Objekt, die ein Array in Parameter .. und schließlich muss "subskribierbar" sein, wie meine Component-Aufrufe subscribe auf das Ergebnis. – intuix

3

veraltet sein ich hatte das gleiche Problem und hatte diese Import-Anweisung in meiner Komponente hinzuzufügen:

import 'rxjs/add/observable/fromArray';

Ich fand die Import durch die Suche nach fromArray in der Rx.js Datei hinzufügt Ich war Referenzierung (vorsichtig sein, da es in einem Projekt verschiedene Versionen der Datei sein kann):

System.register("rxjs/add/observable/fromArray", ["rxjs/Observable", "rxjs/observable/ArrayObservable"], true, function(require, exports, module) { 
    // ... 
}); 
3

ich das gleiche Problem hatte, nach einigen Recherchen in meinem Code ...

ich importiert:

import {Observable} from "rxjs/Observable"; 

Statt:

import {Observable} from "rxjs/Rx"; 

Ich hoffe, es kann jemand anderem helfen.

+0

Vielen Dank für Ihre Antwort. In meinem Fall funktionierte diese Form gut: 'import {Observable} von" rxjs ";' – lukeatdesignworks

3

Ich hatte das gleiche Problem. Ich glaube, Sie bekommen das vielleicht, weil vonArray veraltet ist.

Import rxjs/beobachtbare Import andere Teile rxjs zu verhindern, brauchen Sie nicht

import { Observable } from 'rxjs/Observable'; 

fromArray ist veraltet. Statt

verwenden
list() { return Observable.from([{ name: 'London' }]); } 
+0

Normalerweise ist es eine gute Idee, Ihrem Beitrag eine Erklärung hinzuzufügen, die darüber spricht, wie der Code funktioniert. Dies ermöglicht es neuen Entwicklern zu verstehen, was der Code tut. –

+1

@CalebKleveter - vielen Dank für den Hinweis. Ich hatte Kommentare für die Antwort, aber sie waren für den Leser nicht offensichtlich, da es sich um Code-Kommentare in dem Block des Codes handelte. Ich habe die Antwort aktualisiert, um die Kommentare herauszuziehen. – swoodruff

+0

Import 'rxjs/add/beobachtbar/von'; – Zoidy

6

Observable.fromArray() 5 in RxJS Version entfernt wurde, verwenden from()

import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/from'; 
... 
Observable.from([1, 2, 3, 4]);