例如,我有这样的代码
get isChart(): Observable<boolean> {
return this.isTemperatureChart.pipe(
withLatestFrom(this.isHypertensionChart),
map(([isTemperatureChart, isHypertensionChart]) => isTemperatureChart ||
isHypertensionChart)
);
}
或为简化
get isChart(): boolean {
return this.isTemperatureChart && this.isSomeOtherPropertyTrue
}
很久以来,对我来说,如果我有复杂的二进制逻辑,并且不需要任何外部属性,我应该使用过程。而且为了代码的清晰,我一直尝试使用getters。但现在我想,关于这种结构的性质,我找不到正确的答案。是否可以只用getter来GETTING,而不与某个类属性相关联?还是根据OOP和getterssetters的规范--只用于封装类属性?
你的第二个例子返回一个基元值是绝对正确的,但是你的第一个例子会引起问题,因为它将创建一个新的 Observable
每次查询该属性时(如果您使用的是 async
管道)。) 对于angular来说,这将是该组件的每一个变化检测周期,也是你每次在组件ts中查询它的时候。
在这种情况下,你真的不应该使用getters。如果你想让消费者防止覆盖observable,而只是读取它,你应该把它设置为 readonly
访问修改器。这样你的例子就会改成。
readonly isChart$: Observable<boolean> = this.isTemperatureChart.pipe(
withLatestFrom(this.isHypertensionChart),
map(([isTemperature, isHypertension]) => isTemperature || isHypertension)
);
我不知道你的代码,但从你的变量命名来看,感觉你最好用的是: combineLatest
而不是 withLatestFrom