2016-07-15 14 views
0

Ich lese derzeit etwas über die RxJS-Bibliotheken und nehme mir Zeit, einige der von einigen Architekten und Mitwirkenden angebotenen Kurse mit dem Ziel durchzugehen, dieses Wissen in eine angular2-Anwendung zu integrieren. Ich finde es jedoch schwierig, weil ich nicht herausfinden kann, wie ich die Syntax ändern kann, damit ich RxJS verwenden kann, wie ich es in jedem der Beispiele sehe, die nicht angular2-spezifisch sind.RxJS Angular 2 Syntax

this.$mouseObserver = Rx.Observer.create(
     function (x) { 
    console.log('Next: %s', x); 
    }, 
    function (err) { 
    console.log('Error: %s', err); 
    }, 
    function() { 
    console.log('Completed'); 
    }); 

Rx kommt immer undefiniert, auch nach dem Import es: Zum Beispiel, wenn ich versuche, einen Beobachter in einem Konstruktor zu erstellen. Beobachter und beobachtbare Einfuhrgeld, sowie die Methoden für sie. Fehle ich etwas Grundlegendes? Jede Dokumentation für RxJS startet fast alles mit Rx., aber ich habe kein einziges Tutorial für Angular 2 gesehen, das diese Syntax verwendet.

Antwort

1

Wenn Sie:

import { Observer } from 'rxjs/Observer'; 

oder:

import { Observer } from 'rxjs/Rx'; 

Sie Observer.create verwenden (ohne Rx.). Um Rx.Observer zu verwenden, müssen Sie import * as Rx from 'rxjs/Rx';

Importieren von einzelnen Klassen/Objekte ist in der Regel bevorzugt, deshalb sehen Sie mehr Importe von diesem Formular. Die Rx. Form ist in der Regel gesehen, wo Rx Bibliothek nicht importiert wird (zB Projekt ist in node Umgebung nicht gebaut), aber von einem <script src="..."> Tag

EDIT verwiesen: In Antwort auf C. Kearns Kommentar:

Observer , in RxJS 5 Typ Definition, ist eine Schnittstelle. Es hat keine Implementierung und es wird nicht zu Javascript kompiliert. Sie können also keine Funktion davon aufrufen. Die Schnittstelle wird erklärt, wie:

export interface Observer<T> { 
    isUnsubscribed?: boolean; 
    next: (value: T) => void; 
    error: (err: any) => void; 
    complete:() => void; 
} 

In Ihrem Fall erklären $mouseObserver als Observer<any> und dies sollte funktionieren:

this.$mouseObserver = { 
    next: function (x) { 
    console.log('Next: %s', x); 
    }, 
    error: function (err) { 
    console.log('Error: %s', err); 
    }, 
    complete: function() { 
    console.log('Completed'); 
    } 
}; 
+0

das macht sehr viel Sinn. Wenn ich jedoch nur Observer importiere und 'this. $ MouseObserver = Observer.create' benutze, bekomme ich den Fehler:' kann den Namen 'Observer' nicht finden, und importiere 'import * als Rx von' rxjs/Rx ';' und benutze ' Rx.Observer.create' gibt mir den Fehler 'Property Observer existiert nicht auf typeof –

+0

Gilt dies auch für Observables. Ich habe das genaue Problem mit der Verwendung von 'Rx'. Ich wollte ein Observable aus einem Array erstellen, blieb aber irgendwie bei 'Rx' hängen. Ich habe eine Frage hier "http: // stackoverflow.com/Fragen/43177833/unfähig zu importieren-rx-zu-meinem-Winkel-2-Anwendung", @Can Nguyen können Sie eine Antwort geben? –

+0

Mit den vorgeschlagenen Importen bei Verwendung von Observable.from ([1,2,3]). Ich bekomme einen Fehler von 'von'. Das Importieren von 'from' von' import 'rxjs/add/observable/from'' hilft auch nicht. –