Angular 当提供角组件使用的专用api访问时,可观察到热态与冷态

Angular 当提供角组件使用的专用api访问时,可观察到热态与冷态,angular,rxjs,Angular,Rxjs,虽然冷热观测的一般概念对我来说似乎很清楚,但我在处理一些具体案例时感到困惑 有一个特性标志API,其中客户端库提供内部缓存并公开基于回调的访问。我想通过创建一个提供特性标志的服务,在Angular中使用该客户机。由于我需要对客户端进行一些额外的配置,并确保按需刷新,因此我想出了以下创建可观察对象的方法: 公共标志$(键:字符串){ if(this.flagCache[key]){ 返回此.flagCache[key]; } const observeKeyFlag$=此.commonConfig

虽然冷热观测的一般概念对我来说似乎很清楚,但我在处理一些具体案例时感到困惑

有一个特性标志API,其中客户端库提供内部缓存并公开基于回调的访问。我想通过创建一个提供特性标志的服务,在Angular中使用该客户机。由于我需要对客户端进行一些额外的配置,并确保按需刷新,因此我想出了以下创建可观察对象的方法:

公共标志$(键:字符串){
if(this.flagCache[key]){
返回此.flagCache[key];
}
const observeKeyFlag$=此.commonConfig$.pipe(
映射(配置=>
this.observeFlag$(key,config)),
//shareReplay应确保observableFlag的重用$
//在后续重新连接/连接时创建
shareReplay({refCount:true,bufferSize:1}),
开关映射(cachedObservableFlag$=>
此.refresh$.pipe(
过滤器(refreshKey=>refreshKey==key),
开关映射(()=>
cachedObservableFlag$))
);
返回此.flagCache[key];
}
公共刷新(键:字符串){
this.refresh$.next(键);
}
现在的关键问题是,是否可以像上面那样返回可观察值(即感谢
shareReply()

this.flagCache[key]=newreplysubject(1);
observeKeyFlag$.subscribe(this.flagCache[key]);
这个.flagCache[key];
  • 这两种选择之间有什么区别
  • ReplySubject
    相比,
    shareReplay()
    是否有重要区别
注意:
refresh$
部分比较复杂,它为组件保留一个键映射,以便一次刷新所有键

不要认为在角度变化中使用上述方法有什么问题,而只是为了举例说明,预期用途是:


功能1已启用内容
功能2已启用内容

你问了几个问题

因此,我将尝试回答其中一些问题

是的,可以返回可观察到的

我尝试总是返回一个可观察的。这样,如果我返回一个可观察的,我可以使用异步管道,通过使用异步管道,我不必担心在Ngondestory上订阅和取消订阅

现在,这两种情况都还可以,但现在要考虑代码的可读性和代码样式/首选项