Estoy buscando una manera de decirle básicamente a angular que omita un elemento en una repetición ng si coincide con una expresión, básicamente continue
;
En controlador:
$scope.players = [{
name_key:'FirstPerson', first_name:'First', last_name:'Person'
}, {
name_key:'SecondPerson', first_name:'Second', last_name:'Person'
}]
Ahora, en mi plantilla, quiero mostrarles a todos los que no coinciden name_key='FirstPerson'
. Pensé que tenían que ser filtros, así que configuré un Plunkr para jugar con él, pero no he tenido suerte. Intento de Plunkr
angularjs
angularjs-ng-repeat
aron.duby
fuente
fuente
Respuestas:
Como sugirió @Maxim Shoustin , la mejor manera de lograr lo que desea sería usar un filtro personalizado.
Pero hay otras formas, una de ellas es usar la
ng-if
directiva en el mismo elemento donde colocó lang-repeat
directiva (también, aquí está el plunker ):Esto puede presentar una pequeña desventaja desde una perspectiva estética, pero tiene la gran ventaja de que su filtrado podría basarse en una regla que no está tan estrechamente acoplada a la
players
matriz y que puede acceder fácilmente a otros datos en el alcance de su aplicación:Actualización
Como se indicó, esta es una de las soluciones para este tipo de problema y puede que se adapte a sus necesidades o no.
Como se señaló en los comentarios,
ng-if
es una directiva, lo que en realidad significa que podría hacer más cosas en segundo plano de lo que cabría esperar.Por ejemplo,
ng-if
crea un nuevo alcance a partir de su padre :Por lo general, esto no afecta el comportamiento normal, pero para evitar casos inesperados, debe tener esto en cuenta antes de implementar.
fuente
Sé que esto es antiguo, pero en caso de que alguien busque otra posible solución, aquí hay otra forma de resolver esto: use la funcionalidad de filtro estándar :
Entonces, para el ejemplo de TS, algo como esto debería funcionar:
No es necesario escribir filtros personalizados, no es necesario usarlos
ng-if
con su nuevo alcance.fuente
player in players | filter: { name_key: '' }
? Esa directiva en particular no coincidirá solo con los jugadores con no / an vacíoname_key
. La inversa,name_key: '!'
destinada a seleccionar cualquier jugador con un no vacíoname_key
tampoco funcionará.ng-repeat="(key, val) in player"
Puede utilizar un filtro personalizado al implementar
ng-repeat
. Algo como:myfilter.js
:Manifestación Plunker
fuente