异步管道从Observable或Subject获取值?

时间:2016-05-06 09:24:07

标签: angular

来自angular2

异步管道订阅Observable或Promise并返回它发出的最新值。发出新值时,异步管道会标记要检查更改的组件。

对于我的情况,如果我希望async订阅从XMLHttpRequest调用xhr.upload.onprogress生成的事件。我要创建一个Subject或Observable吗?每次事件发生时,我都需要将它推送到此(主题或可观察的)的所有订阅者(包括异步管道)

  xhr.upload.onprogress = (event) => {
    this._progress = Math.round(event.loaded / event.total * 100);
    this._subject.onNext(this._progress/100); // push the progress value to the async pipe who is the subscriber
  };

1 个答案:

答案 0 :(得分:2)

您可以使用其中任何一个,但是对于原始observable还有一些工作要做,因为您需要设置观察者并使可观察的热点。然后你可以使用观察者来通知。

observer$:Observer<number>;

observable:Observable<number> = Observable.create(observer => {
  this.observer$ = observer;
}).share();

xhr.upload.onprogress = (event) => {
  this._progress = Math.round(event.loaded / event.total * 100);
  this.observer$.next(this._progress/100);
};

对于主题,已经是这种情况(热和可观察/观察者结合)。请注意,您应使用next代替onNext

xhr.upload.onprogress = (event) => {
  this._progress = Math.round(event.loaded / event.total * 100);
  this._subject.next(this._progress/100);
};