Angular 2和RxJS 5 Observable.share()
问题描述:
运行Angular 2 RC4
与RxJS 5 beta 6
,我很难弄清楚为什么我的observable不能在用户间共享。我试图按照指示小心无济于事。我的成份低于,但你可以看到它运行现场at this PlunkerAngular 2和RxJS 5 Observable.share()
模板
<div> Toggle sub 1:
<button (click)="subOne=!subOne">{{subOne?'One is ON ':'One is OFF'}}</button>
</div>
<div> Toggle sub 2:
<button (click)="subTwo=!subTwo">{{subTwo?'Two is ON ':'Two is OFF'}}</button>
</div>
<ul><li *ngFor="let L of log.slice(-16)">{{L}}</li></ul>
类
_subOne = false;
get subOne(){return this._subOne};
set subOne(val){
this._subOne = val;
//if set to true, subscribe
if(val) this.subscriptions.one =
this.source().subscribe(d=>this.print('One sees '+d));
//else, unsubscribe
else this.subscriptions.one.unsubscribe();
}
_subTwo = false;
get subTwo(){return this._subTwo};
set subTwo(val){
this._subTwo = val;
if(val) this.subscriptions.two =
this.source().subscribe(d=>this.print('Two sees '+d));
else this.subscriptions.two.unsubscribe();
}
subscriptions = {'one':null,'two':null};
source(){
return Observable.interval(3000)
.do(()=>this.print("*******EMITTING*******")).share();
}
print(value){this.log.push(value);}
log=[];
输出
由于我使用.share()
运营商,我预计用户共享相同的可观察性。他们为什么不是?
答
我认为这是因为您每次调用source
方法时都会创建一个可观察值。您需要订阅相同的可观察实例。
source:Observable = this.source(); // <-----
set subOne(val){
this._subOne = val;
if(val) this.subscriptions.one =
this.source.subscribe(d=>this.print('One sees '+d)); // <-----
else this.subscriptions.one.unsubscribe();
}