Estou tentando fazer algo como:
<div ng-controller="TestCtrl">
<div ng-repeat="(k,v) in items | filter:hasSecurityId">
{{k}} {{v.pos}}
</div>
</div>
Parte AngularJs:
function TestCtrl($scope)
{
$scope.items = {
'A2F0C7':{'secId':'12345', 'pos':'a20'},
'C8B3D1':{'pos':'b10'}
};
$scope.hasSecurityId = function(k,v)
{
return v.hasOwnProperty('secId');
}
}
Mas de alguma forma, ele está me mostrando todos os itens. Como posso filtrar (chave, valor)?
Respostas:
Os filtros angulares só podem ser aplicados a arrays e não a objetos, da API do angular -
Você tem duas opções aqui:
1) mover
$scope.items
para uma matriz ou -2) pré-filtrar os
ng-repeat
itens, como este:E no controlador:
jsfiddle : http://jsfiddle.net/bmleite/WA2BE/
fonte
Minha solução seria criar um filtro personalizado e usá-lo:
E em html:
fonte
Você também pode usar
ng-repeat
comng-if
:fonte
Ou simplesmente use
Veja a solução atualizada aqui:
http://jsfiddle.net/RFontana/WA2BE/93/
fonte
ng-if
vez dissoVocê pode simplesmente usar o módulo angular.filter e, em seguida, filtrar até mesmo por propriedades aninhadas.
veja: jsbin
2 Exemplos:
JS:
HTML:
fonte
angular.filter
não é um módulo angular central e que você é o autor dele.toArray
filtro não está mais presente. Existe uma substituição, porque ofilter
filtro ainda não permite objetos?Já é meio tarde, mas procurei um filtro semelhante e acabei usando algo assim:
fonte
Embora esta questão seja bastante antiga, gostaria de compartilhar minha solução para desenvolvedores do Angular 1. O objetivo é apenas reutilizar o filtro angular original, mas passando de forma transparente quaisquer objetos como um array.
use-o assim:
aqui está um êmbolo
fonte
Fiz um pouco mais de um filtro genérico que já usei em vários projetos:
HTML:
JS:
fonte