【发布时间】:2018-03-13 13:03:52
【问题描述】:
我的服务代码如下:
private caseListSource = new BehaviorSubject({});
caseList$ = this.caseListSource.asObservable();
loadCaseList() {
return this._httpClient.get<Case>(environment.api_url +'/cases').do(data =>{
this.caseListSource.next(data);
});
在我的组件中,我正在执行以下操作:
caseList:any;
ngOnInit() {
this.subscription = this._caseService.loadCaseList().subscribe(data =>
this.caseList = data);
}
目前,我正在使用 do 在 BehaviorSubject 上调用 next。有一个更好的方法吗?我应该在 m subscribe 调用中调用 .next() 吗?我会在每个想要通知的组件中调用next 吗?
最初我没有使用BehaviorSubject,但是当我登录到我的应用程序并转到select 路由时,选择组件中的ngOnInit 将填充caseList,我将在另一个中使用它组件也是如此。一旦我刷新了诸如case\2988 之类的页面,caseList 就会以未定义的形式返回。
【问题讨论】:
-
所以你使用
BehaviorSubject作为缓存? -
@martin - 我可能更新了我最初的问题的帖子。
-
也许您可以将流 (
this._httpClient.get...) 保存为公共属性(或通过函数公开)并将shareReplay(1)运算符放在末尾。然后当有人第一次订阅时,它会调用它并与所有未来的订阅者分享结果。 -
我对使用 BehiavorSubject 而不是在服务中使用共享变量感到有些困惑。如果我使用共享变量创建服务甚至覆盖它们,角度组件也会检测到这些变化,那我为什么要使用 BehiavorSubject 而不是共享变量呢?例如,一个数组。
标签: angular rxjs behaviorsubject