J'ai une gamme de produits que je répète en utilisant ng-repeat et j'utilise
<div ng-repeat="product in products | filter:by_colour">
pour filtrer ces produits par couleur. Le filtre fonctionne mais si le nom / description du produit, etc. contient la couleur, le produit reste après l'application du filtre.
Comment définir le filtre pour qu'il s'applique uniquement au champ de couleur de ma matrice plutôt qu'à chaque champ?
angularjs
ng-repeat
angularjs-filter
Tim Webster
la source
la source
Réponses:
Voir l'exemple sur la page de filtre . Utilisez un objet et définissez la couleur dans la propriété color:
la source
filter:{ color: '...', size: '...', ...}
Spécifiez la propriété (c'est-à-dire
colour
) à laquelle vous souhaitez appliquer le filtre:la source
'!'+
, comme ceci<div ng-repeat="product in products | filter:{ colour: '!'+by_colour }">
<div ng-repeat="product in products | filter:{ resultsMap.annie: '!!' }">
ou (quelque chose d' équivalent) comme celui - ci:<div ng-repeat="product in products | filter:by">
et sur le contrôleur:$scope.by = { 'resultsMap.annie': '!!' };
. Cette deuxième approche vous donne plus de contrôle sur la propriété filtrée. Remarque:'!!'
signifie "non nul".customFilter
peut être un simple objet sur votre ordinateurscope
que vous mettez à jour à tout moment. Vérifiez ce plunker .Vous pouvez filtrer par un objet avec une propriété correspondant aux objets que vous devez filtrer dessus:
Cela peut bien sûr être transmis par variable, comme l'a suggéré Mark Rajcok.
la source
Si vous souhaitez filtrer sur un petit-enfant (ou plus profond) de l'objet donné, vous pouvez continuer à développer votre hiérarchie d'objet. Par exemple, si vous souhaitez filtrer sur 'thing.properties.title', vous pouvez effectuer les opérations suivantes:
Vous pouvez également filtrer sur plusieurs propriétés d'un objet simplement en les ajoutant à votre objet filtre:
la source
La meilleure façon de le faire est d'utiliser une fonction:
html
javascript
Alternativement, vous pouvez utiliser ngHide ou ngShow pour afficher et masquer dynamiquement des éléments en fonction de certains critères.
la source
Soyez prudent avec le filtre angulaire. Si vous souhaitez sélectionner une valeur spécifique dans le champ, vous ne pouvez pas utiliser de filtre.
Exemple:
javascript
html
Cela sélectionnera les deux, car utiliser quelque chose comme
substr
Cela signifie que vous voulez sélectionner le produit où "couleur" contient la chaîne "bleu" et non où "couleur" est "bleu".
la source
<div ng-repeat="product in products | filter: { color: 'blue' }:true">
ne fonctionnera que sur les correspondances exactes (le «vrai» à la fin est l'argument de comparaison: lienRecherche par couleur:
vous pouvez aussi faire un nid intérieur.
la source
Si vous deviez faire ce qui suit:
... vous obtiendrez non seulement des éléments de itemTypeId 2 et itemStatus 1, mais vous obtiendrez également des éléments avec itemType 20, 22, 202, 123 et itemStatus 10, 11, 101, 123. Cela est dû au fait que le filtre: {.. .} la syntaxe fonctionne comme une chaîne contient une requête.
Cependant, si vous ajoutiez la condition : true , elle filtrerait par correspondance exacte:
la source
ma façon est la suivante
Affichage comme ceci
la source
Vous devez utiliser
filter:{color_name:by_colour}
au lieu deSi vous souhaitez faire correspondre avec une seule propriété d'un objet, écrivez cette propriété au lieu de l'objet, sinon une autre propriété obtiendra une correspondance.
la source
Spécifiez la propriété dans le filtre, de l'objet sur lequel vous souhaitez appliquer le filtre:
Mais vous souhaitez appliquer le filtre uniquement sur le prénom
la source
Si vous souhaitez filtrer pour un champ:
Si vous souhaitez filtrer tous les champs:
et https://docs.angularjs.org/api/ng/filter/filter bon pour vous
la source