Estou procurando uma maneira de dizer basicamente ao angular para pular um item em uma repetição do ng se ele corresponder a uma expressão, basicamente continue
;
No controlador:
$scope.players = [{
name_key:'FirstPerson', first_name:'First', last_name:'Person'
}, {
name_key:'SecondPerson', first_name:'Second', last_name:'Person'
}]
Agora, em meu modelo, quero mostrar a todos que não correspondem name_key='FirstPerson'
. Achei que deviam ser filtros, então configurei um Plunkr para brincar com ele, mas não tive sorte. Plunkr Attempt
angularjs
angularjs-ng-repeat
aron.duby
fonte
fonte
Respostas:
Como @Maxim Shoustin sugeriu, a melhor maneira de conseguir o que você deseja é usar um filtro personalizado.
Mas há outras maneiras, uma delas é usar a
ng-if
diretiva no mesmo elemento em que você colocou ang-repeat
diretiva (também, aqui está o plunker ):Isso pode representar uma pequena desvantagem do ponto de vista estético, mas tem a grande vantagem de que sua filtragem pode ser baseada em uma regra que não é tão fortemente acoplada à
players
matriz e que pode acessar facilmente outros dados no escopo do seu aplicativo:Atualização
Conforme dito, esta é uma das soluções para este tipo de problema e pode ou não atender às suas necessidades.
Conforme apontado nos comentários,
ng-if
é uma diretiva, o que na verdade significa que ela pode fazer mais coisas em segundo plano do que você espera.Por exemplo,
ng-if
cria um novo escopo de seu pai :Isso geralmente não afeta o comportamento normal, mas para evitar casos inesperados, você deve ter isso em mente antes de implementar.
fonte
Sei que é antigo, mas caso alguém procure outra solução possível, aqui está outra forma de resolver isso - use a funcionalidade de filtro padrão :
Portanto, para o exemplo de TS, algo como isto deve fazer:
Não há necessidade de escrever filtros personalizados, nem de usar
ng-if
com seu novo escopo.fonte
player in players | filter: { name_key: '' }
? Essa diretiva específica não corresponderá apenas a jogadores sem / um vazioname_key
. O inverso,name_key: '!'
destinado a selecionar qualquer jogador com um não vazioname_key
também não funcionará.ng-repeat="(key, val) in player"
Você pode usar o filtro personalizado ao implementar
ng-repeat
. Algo como:myfilter.js
:Demo Plunker
fonte