J'ai un composant qui est utilisé pour afficher une liste de tableaux de bord à partir d'un observable. Maintenant, l'utilisateur a besoin de la possibilité de chercher dans cette liste, mais en raison de la petite taille, je préfère faire ce côté client.Comment filtrer une observable à l'aide d'un observable
Pour obtenir ce travail j'ai ajouté trois à la composante observables
@Input() dashboards: Observable<Dashboard[]>; // dashboards
term = new Subject<string>(); // search term
results: Observable<Dashboard[]>; // actual dashboard to display
Pour configurer les résultats observables j'utiliser le code suivant.
ngOnInit(): void {
this.results = this
.term
.distinctUntilChanged()
.share()
.switchMap(term => {
return this.getDashboards(term);
})
.share();
}
private getDashboards(term) {
return this.dashboards
.map((dashboards: Dashboard[]) => {
return dashboards.filter(
this.getFilter(term)
);
});
}
private getFilter(term) {
term = term.toLowerCase();
return (dashboard: Dashboard) => {
// filter logic
};
}
Dans le modèle que je donne les résultats suivants
<input
[disabled]="(dashboards | async)?.length < 1"
(keyup)="term.next($event.target.value)"
type="search"
>
<ul>
<li *ngFor="let dashboard of (results | async)">
{{dashboard.name}}
</li>
</ul>
Sur rien de charge est affiché, mais lors de la saisie de la liste est affichée et être filtré.
Donc, ma question, est-ce le chemin à parcourir ou est-ce si loin, en second lieu si c'est la bonne façon, comment puis-je être sûr que sur le chargement des données est montré?
Pour vous assurer que les données sont affichées, vous devez imprimer les données à la console. –
Comment voulez-vous dire cela? J'ai un simple vidage dans ma vue des tableaux de bord et des résultats et sur l'état initial, les tableaux de bord montrent les données alors que les résultats sont vides. Jusqu'à ce que je commence à taper que les résultats commencent à avoir des informations – MKroeders