Donc j'essaye de construire un tuyau personnalisé pour faire un filtre de recherche de plusieurs valeurs dans une boucle ngFor. J'ai cherché un bon nombre d'heures pour un bon exemple de travail, et la plupart d'entre eux sont basés sur des versions précédentes et ne semblent pas fonctionner. Donc, je construisais le tuyau et en utilisant la console pour me donner les valeurs. Cependant, je n'arrive pas à voir apparaître le texte d'entrée.Angular 4 Filtre Rechercher un tuyau personnalisé
Voici les endroits précédents, je l'ai regardé pour trouver des exemples de travail:
http://jilles.me/ng-filter-in-angular2-pipes/
https://plnkr.co/edit/vRvnNUULmBpkbLUYk4uw?p=preview
https://www.youtube.com/results?search_query=filter+search+angular+2
https://www.youtube.com/watch?v=UgMhQpkjCFg
Voici le code que j'ai actuellement:
component.html
<input type="text" class="form-control" placeholder="Search" ngModel="query" id="listSearch" #LockFilter>
<div class="panel panel-default col-xs-12 col-sm-11" *ngFor="let lock of locked | LockFilter: query">
<input type="checkbox" ngModel="lock.checked" (change)="openModal($event, lock)" class="check" id="{{lock.ID}}">
<label for="{{lock.ID}}" class="check-label"></label>
<h3 class="card-text name" ngModel="lock.name">{{lock.User}}</h3>
<h3 class="card-text auth" ngModel="lock.auth">{{lock.AuthID}}</h3>
<h3 class="card-text form" ngModel="lock.form">{{lock.FormName}}</h3>
<h3 class="card-text win" ngModel="lock.win">{{lock.WinHandle}}</h3>
</div>
pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'LockFilter'
})
export class LockFilterPipe implements PipeTransform {
transform(locked: any, query: string): any {
console.log(locked); //this shows in the console
console.log(query); //this does not show anything in the console when typing
if(!query) {
return locked;
}
return locked.filter((lock) => {
return lock.User.toLowerCase().match(query.toLowerCase());
});
}
}
J'ai importé le tuyau dans le module.
Je suis encore un peu plus jeune à Angular 4 et j'essaie de comprendre comment faire ce travail. En tout cas merci pour votre aide!
Je suppose que je devrais être plus précis. J'ai déjà construit une recherche de filtre dans JS qui ne filtre pas toutes les options, ce que j'essaie de faire. Pas seulement filtrer le nom d'utilisateur. Je filtre les 4 éléments de données. J'ai choisi un Pipe car c'est ce que Angular vous suggère de faire comme ils l'ont initialement utilisé dans AngularJS. J'essaie simplement de recréer le tuyau de filtre que nous avions dans AngularJS qu'ils ont enlevé pour la performance. Toutes les options que j'ai trouvées ne fonctionnent pas, ou sont des versions précédentes d'Angular.
Si vous avez besoin de quelque chose d'autre de mon code, faites-le moi savoir.
Les tubes qui implémentent une logique métier autre que le formatage de sortie sont traités comme des anti-modèles dans Angular. Utilisez plutôt des fonctions pour encapsuler la logique. Utilisez-le ensuite dans votre liaison: 'let lock de filteredLocks()' –
J'ai un exemple ici: https://stackoverflow.com/questions/45199776/custom-pipe-to-sort-array-of-array – DeborahK
Yup! La réponse de Deborah est la voie à suivre –