Angular2 +缓存实践

时间:2017-10-11 11:12:29

标签: angular typescript rxjs

我尝试使用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

1 个答案:

答案 0 :(得分:2)

你可以这样写:

this._lazyValue.filter(Boolean)

看起来更干净。

但似乎您根本不​​需要使用BehaviorSubject而是使用ReplaySubject(1)