Je cherche un moyen de dire à angular de sauter un élément dans un ng-repeat s'il correspond à une expression, en gros continue
;
Dans le contrôleur:
$scope.players = [{
name_key:'FirstPerson', first_name:'First', last_name:'Person'
}, {
name_key:'SecondPerson', first_name:'Second', last_name:'Person'
}]
Maintenant, dans mon modèle, je veux montrer à tous ceux qui ne correspondent pas name_key='FirstPerson'
. J'ai pensé que ce devait être des filtres, alors j'ai configuré un Plunkr pour jouer avec mais je n'ai pas eu de chance. Tentative de Plunkr
angularjs
angularjs-ng-repeat
aron.duby
la source
la source
Réponses:
Comme @Maxim Shoustin l'a suggéré, la meilleure façon d'obtenir ce que vous voulez serait d'utiliser un filtre personnalisé.
Mais il y a d'autres moyens, l'un d'eux étant d'utiliser la
ng-if
directive sur le même élément où vous avez mis lang-repeat
directive (aussi, voici le plunker ):Cela peut présenter un inconvénient mineur d'un point de vue esthétique, mais présente un avantage majeur en ce que votre filtrage pourrait être basé sur une règle qui n'est pas aussi étroitement couplée au
players
tableau et qui peut facilement accéder à d'autres données dans la portée de votre application:Mise à jour
Comme indiqué, c'est l' une des solutions à ce type de problème et peut ou non répondre à vos besoins.
Comme indiqué dans les commentaires, il
ng-if
s'agit d'une directive, ce qui signifie en fait qu'elle pourrait faire plus de choses en arrière-plan que vous ne le pensez.Par exemple,
ng-if
crée une nouvelle étendue à partir de son parent :Cela n'affecte généralement pas le comportement normal, mais pour éviter les cas inattendus, vous devez garder cela à l'esprit avant de l'implémenter.
la source
Je sais que c'est un ancien, mais au cas où quelqu'un chercherait une autre solution possible, voici une autre façon de résoudre ce problème - utilisez la fonctionnalité de filtre standard :
Donc, pour l'exemple TS, quelque chose comme ça devrait faire:
Pas besoin d'écrire des filtres personnalisés, pas besoin d'utiliser
ng-if
avec sa nouvelle portée.la source
player in players | filter: { name_key: '' }
? Cette directive particulière ne correspondra pas uniquement aux joueurs sans / un videname_key
. L'inverse,name_key: '!'
destiné à sélectionner n'importe quel joueur avec un non-videname_key
ne fonctionnera pas non plus.ng-repeat="(key, val) in player"
Vous pouvez utiliser un filtre personnalisé lorsque vous implémentez
ng-repeat
. Quelque chose comme:myfilter.js
:Démo Plunker
la source