2017-10-11 4 views
0

J'expérimente avec Angular 2 et la mise en cache des valeurs reçues des services backend. J'ai remarqué que je suis arrivé au modèle suivant - en utilisant BehaviorSubject avec une valeur initiale indéfinie et le filtrer pour reporter l'affichage des contrôles dépendant des valeurs reçues du backend.Angular2 + pratiques de mise en cache

private _lazyValue: BehaviorSubject<ILazyValue> = 
    new BehaviorSubject<ILazyValue>(undefined); 

get lazyValue(): Observable<ILazyValue> { 
    return this._lazyValue.filter(val => val !== undefined); 
} 

intérieur modèle:

<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> 

Question: sont là des raccourcis pour cette expression un peu louche:

this._lazyValue.filter(val => val !== undefined) 

Ai-je mauvais usage BehaviorSubject en quelque sorte?

Répondre

2

Vous pouvez l'écrire comme ceci:

this._lazyValue.filter(Boolean) 

qui ressemble plus propre.

Mais il semble que vous n'avez pas besoin d'utiliser BehaviorSubject et d'utiliser ReplaySubject(1) à la place.