新行为主题'之间的区别和' BehaviorSubject.create'

时间:2016-05-13 19:39:19

标签: angular rxjs5

我正在使用Angular 2和RxJS 5.

这两者之间有什么区别:

哪个应该先使用?感谢

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

isOpen$ = BehaviorSubject.create(true);

2 个答案:

答案 0 :(得分:10)

BehaviorSubject没有create方法,所以我猜这是Subject基类暴露的。

使用构造函数。 在这种情况下,您应该使用BehaviorSubject的构造函数。 create方法用于合并ObserverObservable

例如,您可以通过执行以下操作将WebSocket转换为Subject

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);

答案 1 :(得分:1)

它们在Subject上似乎完全相同。但是,在BehaviorSubject上没有create方法。它继承自Subject

以下是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;
}

BehaviorSubject上,它可能尚未实施。可能将来会实施。

因此,在BehaviorSubject中,create的行为与构造函数完全不同。