2016-05-13 6 views
3

Ich bin mit Angular 2 und RxJS 5.Unterschied zwischen ‚neuen BehaviorSubject‘ und ‚BehaviorSubject.create‘

Gibt es einen Unterschied zwischen diesen beiden:

Und die zuerst verwendet werden soll? Dank

isOpen$ = new BehaviorSubject<boolean>(true); 

und

isOpen$ = BehaviorSubject.create(true); 
+0

Java, aber wahrscheinlich die gleichen Prinzipien gelten: http://stackoverflow.com/questions/13046877/consider-providing-static-factory-methods-insteads-of-constructors –

+0

@KevinKrumwiede danke für Hilfe! –

Antwort

6

BehaviorSubject haben keine create Methode, so dass ich vermute, dass durch die Subject Basisklasse ausgesetzt wird.

Verwenden Sie den Konstruktor. In diesem Fall sollten Sie den Konstruktor BehaviorSubject verwenden. Die create Methode wird verwendet, um eine Observer und Observable zu kombinieren.

Zum Beispiel könnten Sie eine WebSocket in eine Subject, indem Sie konvertieren:

var webSocket = new WebSocket(url); 

var observer = Observer.create(next => webSocket.send(JSON.stringify(next))); 
var observable = Observable.fromEvent(webSocket, 'message', m => JSON.parse(m.data)); 

var subject = Subject.create(observer, observable); 
+0

vielen dank! –

1

Sie scheinen genau auf Subject gleich zu sein. Jedoch gibt es unter BehaviorSubject kein create Verfahren. Es ist geerbt von Subject

Hier ist der Code von Subject

static create: Function = <T>(destination: Observer<T>, source: Observable<T>): Subject<T> => { 
    return new Subject<T>(destination, source); 
}; 

constructor(protected destination?: Observer<T>, protected source?: Observable<T>) { 
    super(); 
    this.source = source; 
} 

Auf BehaviorSubject, ist es wahrscheinlich nur noch nicht implementiert. Kann in Zukunft umgesetzt werden.

Also, in BehaviorSubject ist das Verhalten von create völlig anders als der Konstruktor.

+0

vielen dank! –

Verwandte Themen