2017-02-14 2 views
2

Ok, semble facile, mais pas.Filtre angulaire ng-repeat: ¿Comment spécifier les champs de filtre?

Je veux effectuer un filtre simplement angulaire, mais j'ai besoin de spécifier quels champs de mon tableau utiliser dans le filtre.

Un filtre de base est:

<li ng-repeat="person in app.people | filter: app.search"> 

Un filtre est un-terrain:

<li ng-repeat="person in app.people | filter: {Surname: app.search}"> 

Comment puis-je spécifier plus d'un champ pour le filtre? Quelque chose comme:

<li ng-repeat="person in app.people | filter: {Name,Surname: app.search}"> 

Voici un Plunker avec filtre de base et le filtre Un-champ: https://jsfiddle.net/odLz1v71/3/

Répondre

2

Dans ce cas, je vous suggère d'ajouter une fonction de filtre dans votre contrôleur comme ceci:

vm.searchFilter = function(item){ 
    // Add your own search logic here 
    return item.Name.includes(vm.search) || item.Surname.includes(vm.search); 
} 

Et puis l'utiliser comme ceci:

<li ng-repeat="person in app.people | filter: app.searchFilter"> 
+0

Ok, je Je ne peux pas croire que Angular n'a pas ce comportement en mode natif ... Je vais utiliser cette fonction de filtrage, mais je vais ajouter "toLowerCase()" aux propriétés et à la valeur de recherche. Merci beaucoup. –

+0

L'équipe Angular ne peut pas prédire, ni inclure, tous les cas d'utilisation pour le filtrage - cela introduirait beaucoup de confusion et troublerait les nouveaux utilisateurs d'un framework avec une courbe d'apprentissage déjà abrupte. –

+0

L'ajout de 'toLowerCase()' est une bonne idée. C'est le genre de chose que je voulais dire par "// Ajoutez votre propre logique de recherche ici" -comment. :-) –

0

je pensez pas que vous pouvez le faire avec le filtre de base directement, mais vous pouvez fournir une fonction pour le filtre filter à utiliser qui va faire cette vérification pour vous:

vm.checkName = function (value) { 
    return value.Name.indexOf(vm.search) > -1 || value.Surname.indexOf(vm.search) > -1; 
    }; 

Voir: https://jsfiddle.net/odLz1v71/4/