2016-07-29 26 views
3

Ich bin gerade dabei, RxJS zu lernen, und ich probiere ständig viele Operatoren und Kombinationen aus, die ich interessant finde.Einige RxJS-Operatoren fehlen im angular2 CLI-Projekt? Was ist zu tun?

Ich lerne Form hier: http://reactivex.io/documentation/operators.html und here.

Ich habe ein Angular2 rc4 CLI-Projekt - also verwende ich Typoskript. RxJS ist: 5.0.0-beta.6

Das Problem:

Ich fand, dass einige Betreiber sind nicht auf dem beobachtbar sind.

Zum Beispiel: Ich möchte eine beobachtbare schaffen, die einer nach dem anderen Schlüsselwertepaare eines Objekts zurückgibt: Sie können sehen, wie die Umsetzung aussieht, wie ich es gemacht habe from here.

// Using Standard JavaScript 
var obj = { 
    foo: 42, 
    bar: 56, 
    baz: 78 
}; 

var source = Rx.Observable.pairs(obj); 

var subscription = source.subscribe(
    function (x) { 
    console.log('Next: %s', x); 
    }, 
    function (err) { 
    console.log('Error: %s', err); 
    }, 
    function() { 
    console.log('Completed'); 
    }); 

// => Next: ['foo', 42] 
// => Next: ['bar', 56] 
// => Next: ['baz', 78] 
// => Completed 

Aber hier ist das, was mein Redakteur sieht so aus:

enter image description here

kein Intelisense für Observable.pairs() ..

enter image description here

Basierend auf this post ich habe aded die 2 Importe:

import {Observable} from "rxjs/Rx"; 
import 'rxjs/Rx'; // import all operators and stuff. it's not good practice i know, but only for this example 

Und mehr Typisierungen für rxjs als Winkel cli bietet installieren tryed, aber funktioniert nicht:

typings install --save --ambient npm:rx/ts/rx.all.d.ts // Unable to resolve "npm:rx/ts/rx.all.d.ts" from "rx" 
or 
typings install rxjs // Unable to find "rxjs" ("npm") in the registry. 

Und aslo verwenden tryed:

import * as Rx form 'rxjs/Rx' 
myObjProperties$ = Rx.Observable.pairs(myObj) // still doesn't work, same error. 

Und aslo, kann ich nicht erklären Warum funktioniert das Drucken des Observable-Objekts auf der Konsole nicht? Ich bekomme eine string-function, die nutzlos ist. Kein Prototypzeug.

console.log('TheAllmightyObservable : ', Observable) // i get: 

// TheAllmightyObservable : function Observable(subscribe) { 
     // this._isScalar = false; 
     // if (subscribe) { 
      // this._subscribe = subscribe; 
     // } 
    // } 

Ich habe das gleiche Problem bei vielen anderen Betreibern: ofObjectChanges, ofArrayChanges, ofWithSkeduler, Paare - einige von ihnen nicht so wichtig - aber es nervt mich, wenn ich fand einen RxJs Betreiber, die sehr nützlich ist, und Ich kann es nicht im angular2 CLI-Projekt verwenden.

Fragen:

  1. was angular2 mit RxJS zu tun hat? (Ich vermisse das allgemeine Bild, denke ich ..) - Gibt es eine separate Liste von angular2-rxjs Operatoren oder RxJS ist vollständig getrennt Paket und kann wie Jquery zum Beispiel verwendet werden? Ich meine keine kabelgebundene Interferenz zwischen den 2 - das kann ich nicht vorhersagen. (Digest-Zyklus verwandt vielleicht ?!)

  2. wo finde ich eine gute Liste aller RxJS Operatoren, die auf angular2 verfügbar sind - vorausgesetzt, dass existiert.

  3. ist dies nur ein Typescript - Typisierungsproblem? Wenn ja, wie installiere ich sie, um alle Operatoren zu haben, die in den Dokumenten verfügbar sind? Wenn keine Typisierung verfügbar ist, wie wird vorübergehend dieses "no property/method found on x" Problem loswerden?

Vielen Dank für die Zeit, mich zu lesen, zu nehmen und helfen

+0

Ich hatte das gleiche Problem [hier] (http://stackoverflow.com/questions/38607203/angular-2-property-topromise-does-not-exist-on-type-observableresponse) und seine etwas ähnlich zu ihm . Es ist noch immer unbeantwortet. Ich habe ein Problem mit angular github, aber immer noch keine richtige Lösung gefunden. Hoffe, du findest eine Lösung dafür –

Antwort

5

Root-Problem eine Lösung für dieses :) von der Suche nach: Sie verwenden eine Version von RxJS aber in der Dokumentation für einen anderen suchen.

RxJS 5 (beta) verwendet mit kantigem 2: https://github.com/ReactiveX/rxjs RxJS 4 (stable): https://github.com/Reactive-Extensions/RxJS

Diese Operatoren existieren nicht auf die neue Version, weshalb man sie nicht sehen kann.

Um Ihre Fragen:

1) RxJS nichts mit Angular2 zu tun haben, können Sie RxJS ohne Angular2 verwenden. RxJS ist nur eine Bibliothek zum Erstellen von Ereignisströmen, es funktioniert orthogonal zu dem, was Sie verwenden generieren Ereignisse.

2) Wenn Sie RxJS 4 verwenden, dann können Sie die docs verwenden, die ziemlich gut sind. RxJS 5 ist noch in Bearbeitung, aber es gibt Dokumente, die durch den Build-Prozess here generiert werden.

3) In diesem Fall handelt es sich nicht um ein Typisierungsproblem.