AngularJS filtre strict sur un seul champ
J'ai un formulaire avec plusieurs filtres, mais pour certains, j'ai besoin d'une stricte comparaison.
tl;dr: comparaison stricte pour user_id
pas pour firstname
.
<select ng-model="search.user_id">
<option value="1">1</option>
<option value="2">2</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="23">23</option>
</select>
<input type="text" ng-model="search.firstname">
<ul>
<li ng-repeat="user in users | filter:search">#{{ user.user_id }} {{ user.firstname}}</li>
</ul>
J'ai essayé le troisième paramètre true
mais il travaille aussi pour firstname
filtre.
Le problème est: si vous sélectionnez la valeur 2
tous les utilisateurs avec un 2
dans leur pièce d'identité sera filtré, je ne veux pas ce comportement.
Ici est la violon.
source d'informationauteur Syl
Vous devez vous connecter pour publier un commentaire.
j'ai essayé de corriger ça en natif, plutôt qu'avec des filtres personnalisés, de son travail, voici le PLUNKER LIEN
avait pour spécifier plusieurs filtres tag
si il y a quelques bémols:
j'ai dû changer le type de numéro de chaîne...
si je réinitialiser la valeur de correspondance exacte il ne marche pas...
alors j'ai dû écrire une coutume filer qui travaille pour une correspondance exacte & ignore vide/valeurs null
vous trouver tous les deux dans la plunker lien
Vous pourriez avoir une fonction comme ceci dans votre contrôleur
et puis vous pouvez l'utiliser comme ceci
Depuis je ne peux pas commenter sur les autres réponses, je vais faire de cette façon.
J'ai utilisé HarisR de la solution, mais je l'ai modifié de sorte qu'il peut être utilisé avec des nombres aussi, si vous avez besoin de votre valeur en tant que nombre.
ou
J'ai rencontré ce problème lorsque j'ai chargé une certaine forme de configuration à partir de Json et les numéros ont été transmis inn que le nombre pas de Chaîne.
Quand j'ai eu un type de composant de 1 et 10 fois serait dans mon ng-repeat avant, j'ai ajouté la
:true
de mon filtre, et rien, quand j'avais ajouté une stricte égalité.Pour corriger cela, j'ai ajouté une méthode pour mon contrôleur appelé castToInt
Puis j'ai modifié mon filtre pour afficher
Voila alors tout a fonctionné
Ma conjecture est que
:true
applique une stricte égalité===
de sorte que vous obtiendrez un faux si vous comparez différents types.Si vous pouvez accepter de changer le type de votre valeur, alors l'on a accepté la réponse est suffisante, mais si vous n'avez aucun contrôle sur les données qui sont présentées à vous, cette méthode fonctionne.
--
Thomas
Changement dans votre code html:
Je suppose que vous voulez
and
si les deux valeurs sont présents. La changer en uneor
si vous en avez besoin. Filtre personnalisé fonction:Une modification de plus de votre contrôleur:
Fourche De Violon.
Si vous souhaitez effectuer une recherche par nom par exemple il suffit d'ajouter une zone de texte nom= recherche.yourFieldNameToName, si vous voulez la recherche dans tous les domaines, il suffit de créer une zone de texte avec la recherche.$ et puis il suffit d'ajouter le filtre:recherche:la stricte sur votre ng-repeat directive.
Exemple de Code Pour mieux expliquer: