例如,我有这样的代码
get isChart(): Observable<boolean> {
return this.isTemperatureChart.pipe(
withLatestFrom(this.isHypertensionChart),
map(([isTemperatureChart, isHypertensionChart]) => isTemperatureChart ||
isHypertensionChart)
);
}
或用于简化
get isChart(): boolean {
return this.isTemperatureChart && this.isSomeOtherPropertyTrue
}
很长一段时间,对我来说很明显,如果我有复杂的二进制逻辑,并且不需要来自外部的任何属性,我应该使用过程。只是为了清晰的代码,我一直尝试使用getter。但是现在我想,关于这种结构的一个性质,却找不到正确的答案。可以吗,将 getter 仅用于 GETTING,而不将其与某些类属性相关联?还是不是根据 OOP 和 getter/setter 的规范 - 仅用于类属性的封装?
返回基元值的第二个示例是绝对正确的,但第一个示例会导致问题,因为每次查询该属性时,它都会创建一个新Observable
(如果您在模板中使用async
管道,则创建一个订阅(。使用 angular,这将是该组件的每个更改检测周期,以及每次在组件 ts 中查询它时。
在这种情况下,您确实不应该使用getter。如果您希望使用者防止覆盖可观察量,并且只是读取它,则应设置readonly
访问修饰符。这会将您的示例更改为:
readonly isChart$: Observable<boolean> = this.isTemperatureChart.pipe(
withLatestFrom(this.isHypertensionChart),
map(([isTemperature, isHypertension]) => isTemperature || isHypertension)
);
不知道你的代码,但从你的变量的命名来看,感觉你最好使用combineLatest
而不是withLatestFrom