我尝试使用Angular 2并缓存从后端服务接收的值。我注意到我采用了以下模式 - 使用未定义初始值的BehaviorSubject
并过滤它以推迟显示依赖于从后端接收的值的控件。
private _lazyValue: BehaviorSubject<ILazyValue> =
new BehaviorSubject<ILazyValue>(undefined);
get lazyValue(): Observable<ILazyValue> {
return this._lazyValue.filter(val => val !== undefined);
}
内部模板:
<div *ngIf="lazyValue | async; else nolv; let lv">
<app-some-control [lazy_value]="lv"></app-some-control>
</div>
<ng-template #nolv>
<span>Loading...</span>
</ng-template>
问题:这个有点可疑的表达方式是否有任何捷径:
this._lazyValue.filter(val => val !== undefined)
我是否以某种方式滥用BehaviorSubject
?
答案 0 :(得分:2)
你可以这样写:
this._lazyValue.filter(Boolean)
看起来更干净。
但似乎您根本不需要使用BehaviorSubject
而是使用ReplaySubject(1)
。