服务发生更改时的角度生命周期挂钩



我有一项服务-让我们调用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

相关内容

  • 没有找到相关文章

最新更新