我有一项服务-让我们调用ServiceA,
它进行了多次HTTP调用,我想在计算完所有内容后检索信息。为此,我有一个布尔变量-isEverythingProcessed,当这种情况发生时。
在我的组件上,让我们称之为组件B,
我正在做:
ngOnCheck(){
if(this.serviceA.isEverythingProcessed){
//dostuff
}
}
这是有效的,但它被称为一百次。有什么替代方案吗?我的意思是,当服务的变量被更改时,在组件检测上实现一个生命周期?
您可以使用rxjs创建一个即将更新的值onInit的可观察值,并订阅更改。这就是我所看到的。尽管如此,如果某个功能正常,并且没有严重的性能问题(一个带有单个if语句的优化fn调用,即使它被调用了几百次,也没有那么糟糕,尽管并不理想(,我不会过度设计它。
Subject
在这里可能就足够了,因为您的组件正在侦听更改。例如,BehaviorSubject总是在有监听器的时候发出,但你可能只想在它发出的时候,确切地说是在它发出时发出。因此,在服务中创建一个Subject,而不是布尔变量,在组件中订阅它,并在Subject发出时施展魔法。组件损坏时请记得取消订阅!
所以我建议使用以下
服务:
isEverythingProcessed = new Subject<boolean>();
当所有计算完成后,调用next()
:
this.isEverythingProcessed.next(true)
和组件:
this.service.isEverythingProcessed.subscribe((bool: boolean) => {
// do stuff!
})
STACKBLITZ演示
如果您需要一个初始值并始终触发,我建议使用BehaviorSubject
而不是Subject
。