https://github.com/danrevah/ngx-pipes
// safeHtml : pour conserver la mise en forme
/* RxJS - Opérateurs */
Un opérateur est une fonction qui se place entre l'Observable et l'Observer (la Subscription, par exemple), et qui peut filtrer et/ou modifier les données reçues avant même qu'elles n'arrivent à la Subscription. Voici quelques exemples rapides :
map() : modifie les valeurs reçues — peut effectuer des calculs sur des chiffres, transformer du texte, créer des objets…
filter() : comme son nom l'indique, filtre les valeurs reçues selon la fonction qu'on lui passe en argument.
throttleTime() : impose un délai minimum entre deux valeurs — par exemple, si un Observable émet cinq valeurs par seconde, mais ce sont uniquement les valeurs reçues toutes les secondes qui vous intéressent, vous pouvez passer throttleTime(1000) comme opérateur.
scan() et reduce() : permettent d'exécuter une fonction qui réunit l'ensemble des valeurs reçues selon une fonction que vous lui passez — par exemple, vous pouvez faire la somme de toutes les valeurs reçues. La différence basique entre les deux opérateurs : reduce() vous retourne uniquement la valeur finale, alors que scan() retourne chaque étape du calcul.
switchMap() renvoie un autre observable map() renvoie une valeur
// exemple : on concatène le libellé d'un item au libellé de l'écran
constructor(public coreServProv: CoreServicesProvider, public vueService: VueService,
libelleService: LibelleService) {
super(undefined, {libelleEcran: libelleService.getLibelleEcran('app.module.recueildonnees.histo.title').pipe(
// switchMap, on veut un autre observable car on attend que l_modal.modalData existe
switchMap(libelleEcran => {
// on enchaîne deux observables sans que cela soit vu par le premier observer
return new Observable<HttpPostResult<LibelleEcran>>(subscriber => {
let l_modal = this;
let l_func = function() {
if (l_modal.modalData) {
libelleEcran.data.libelle_Ecran= libelleEcran.data.libelle_Ecran+" - "+l_modal.modalData.item.libelle_ParamBenefInfoItemR;
subscriber.next(libelleEcran);
subscriber.complete(); // à ne pas oublier, on termine le flux, pour dire à l'observer "c'est fini, casse toi"
} else {
setTimeout(l_func, 200);
}
}
l_func();
})
}))
});
}