Jetez un œil à l'exemple ici: http://docs.angularjs.org/api/ng.filter:filter
Vous pouvez rechercher par n'importe laquelle des propriétés du téléphone à l'aide de <input ng-model="search">
et vous pouvez rechercher uniquement par nom à l'aide de <input ng-model="search.name">
, et les résultats sont correctement filtrés par nom (la saisie d'un numéro de téléphone ne renvoie aucun résultat, comme prévu).
Disons que j'ai un modèle avec une propriété "name", une propriété "phone" et une propriété "secret", comment procéder pour filtrer à la fois les propriétés "name" et "phone" et non la propriété "secret" ? Donc, en substance, l'utilisateur peut taper un nom ou un numéro de téléphone et leng-repeat
filtrerait correctement, mais même si l'utilisateur tapait une valeur qui équivalait à une partie d'une valeur "secrète", il ne retournerait rien.
Merci.
ng-model
(en spécifiantsearch.name
dans le champ INPUTng-model
) entraînerait le filtrage des objets à répéter par leurname
propriété? Ie intuitivement pour moi, vous devriez être en mesure de filtrer spécifiquementname
en spécifiant simplement dans votreng-repeat
filtrefilter: friend.name
:, au lieu de `écrire` <input ng-model = "search.name"> ...Réponses:
Voici le plunker
Nouveau plunker avec un code plus propre et où les éléments de requête et de liste de recherche sont insensibles à la casse
L'idée principale est de créer une fonction de filtrage pour atteindre cet objectif.
De la doc officielle
Mettre à jour
Certaines personnes peuvent avoir des inquiétudes sur les performances dans le monde réel, ce qui est correct.
Dans le monde réel, nous ferions probablement ce genre de filtre à partir du contrôleur.
Voici le post détaillé montrant comment le faire.
en bref, nous ajoutons
ng-change
à l'entrée pour surveiller les nouveaux changements de recherchepuis déclenchez la fonction de filtre.
la source
item.brand.indexOf($scope.query)!=-1 || item.model.indexOf($scope.query)!=-1)
Vous pouvez transmettre un objet en tant que paramètre à votre expression de filtre, comme décrit dans la référence API . Cet objet peut appliquer de manière sélective les propriétés qui vous intéressent, comme ceci:
Voici un Plunker
Attention ... cet exemple fonctionne très bien avec AngularJS 1.1.5, mais pas toujours aussi bien dans 1.0.7. Dans cet exemple, la 1.0.7 s'initialise avec tout filtré, puis fonctionne lorsque vous commencez à utiliser les entrées. Il se comporte comme si les entrées contiennent des valeurs non correspondantes, même si elles commencent en blanc. Si vous voulez rester sur des versions stables, essayez ceci pour votre situation, mais certains scénarios peuvent vouloir utiliser la solution de @ maxisam jusqu'à ce que la version 1.2.0 soit publiée.
la source
Je me suis inspiré de la réponse de @ maxisam et j'ai créé ma propre fonction de tri et je pensais que je la partagerais (car je m'ennuie).
Situation Je veux filtrer à travers un éventail de voitures. Les propriétés sélectionnées à filtrer sont le nom, l'année, le prix et le km. Le prix de l'immobilier et le km sont des nombres (d'où l'utilisation de
.toString
). Je veux également contrôler les lettres majuscules (d'où.toLowerCase
). Aussi, je veux pouvoir diviser ma requête de filtre en différents mots (par exemple, étant donné le filtre 2006 Acura, il trouve les correspondances 2006 avec l'année et Acura avec le nom).Fonction que je passe pour filtrer
la source
Si vous êtes prêt à utiliser des bibliothèques tierces, des 'filtres angulaires' avec une belle collection de filtres peuvent être utiles:
https://github.com/a8m/angular-filter#filterby
la source
J'espère que cette réponse vous aidera, filtre à valeurs multiples
Et exemple de travail dans ce violon
la source
Il y a un tas de bonnes solutions ici, mais je suggérerais d'aller dans l'autre sens. Si la recherche est la chose la plus importante et que la propriété «secret» n'est pas du tout utilisée sur la vue; mon approche pour cela serait d'utiliser le filtre angulaire intégré avec tous ses avantages et de simplement mapper le modèle à un nouveau tableau d'objets.
Exemple de la question:
Maintenant, en html, utilisez simplement le filtre régulier pour rechercher ces deux propriétés.
la source
Approche assez simple utilisant filterBy dans angularJs
Pour travailler plnkr, suivez ce lien
http://plnkr.co/edit/US6xE4h0gD5CEYV0aMDf?p=preview
Cela a spécialement utilisé une seule propriété pour rechercher plusieurs colonnes, mais pas toutes.
manette
la source
J'ai résolu cela simplement:
la source
http://plnkr.co/edit/A2IG03FLYnEYMpZ5RxEm?p=preview
Voici une recherche sensible à la casse qui sépare également votre recherche en mots pour rechercher également dans chaque modèle. Ce n'est que lorsqu'il trouve un espace qu'il essaiera de diviser la requête en un tableau, puis de rechercher chaque mot.
Il renvoie vrai si chaque mot est au moins dans l'un des modèles.
la source
Le filtre peut être un objet JavaScript avec des champs et vous pouvez avoir une expression comme:
la source
J'aime garder c'est simple quand c'est possible. J'avais besoin de regrouper par International, de filtrer sur toutes les colonnes, d'afficher le décompte de chaque groupe et de masquer le groupe si aucun élément n'existait.
De plus, je ne voulais pas ajouter de filtre personnalisé juste pour quelque chose de simple comme celui-ci.
la source
Je suis peut-être très en retard mais c'est ce que j'ai fini par faire. J'ai fait un filtre très général.
Alors utilisez-le comme ça
Votre champ de recherche ressemble à
où name et device_id sont des propriétés dans dvs
la source
Voici une solution simple pour ceux qui veulent un filtre rapide sur un objet:
Le filtre de tableau vous permet d'imiter l'objet que vous essayez de filtrer. Dans le cas ci-dessus, les classes suivantes fonctionneraient très bien:
Et à quoi le deck pourrait ressembler:
Et si vous souhaitez filtrer plusieurs propriétés de l'objet, séparez simplement les noms de champs par une virgule:
EDIT: Voici un plnkr fonctionnel qui fournit un exemple de filtres de propriétés uniques et multiples:
http://embed.plnkr.co/i0wCx6l1WPYljk57SXzV/
la source
ng-repeat
. Votre exemple semble cependant un peu compliqué: y a-t-il un moyen de le résumer? Je sais que la question recherche essentiellement un champ de recherche unique qui ne peut filtrer que pour les propriétés sélectionnées. Dans votre exemple, il semble que nous filtrons les noms de valeur faciale ou les nombres, mais pas les deux. Si je ne comprends pas bien votre exemple, faites-le moi savoir!