来自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
};
答案 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);
};