Eu tenho uma variedade de produtos que estou repetindo usando ng-repeat e estou usando
<div ng-repeat="product in products | filter:by_colour">
para filtrar esses produtos por cor. O filtro está funcionando, mas se o nome / descrição do produto, etc., contiver a cor, o produto permanecerá após a aplicação do filtro.
Como definir o filtro para aplicar apenas ao campo de cores da minha matriz, e não a todos os campos?
angularjs
ng-repeat
angularjs-filter
Tim Webster
fonte
fonte
Respostas:
Veja o exemplo na página de filtro . Use um objeto e defina a cor na propriedade color:
fonte
filter:{ color: '...', size: '...', ...}
Especifique a propriedade (ou seja
colour
) em que deseja aplicar o filtro:fonte
'!'+
, assim<div ng-repeat="product in products | filter:{ colour: '!'+by_colour }">
<div ng-repeat="product in products | filter:{ resultsMap.annie: '!!' }">
ou (algo equivalente) assim:<div ng-repeat="product in products | filter:by">
e no controlador:$scope.by = { 'resultsMap.annie': '!!' };
. Essa segunda abordagem oferece mais controle sobre a propriedade que está sendo filtrada. Nota:'!!'
significa "não nulo".customFilter
pode ser um objeto simples no seuscope
que você atualiza sempre que necessário. Verifique este desentupidor .Você pode filtrar por um objeto com uma propriedade que corresponda aos objetos a serem filtrados:
Obviamente, isso pode ser passado por variável, como sugeriu Mark Rajcok.
fonte
Se você deseja filtrar um neto (ou mais profundo) do objeto em questão, pode continuar a construir sua hierarquia de objetos. Por exemplo, se você deseja filtrar 'thing.properties.title', faça o seguinte:
Você também pode filtrar várias propriedades de um objeto apenas adicionando-as ao seu objeto de filtro:
fonte
A melhor maneira de fazer isso é usar uma função:
html
javascript
Como alternativa, você pode usar o ngHide ou o ngShow para mostrar e ocultar dinamicamente elementos com base em um determinado critério.
fonte
Cuidado com o filtro angular. Se você deseja selecionar um valor específico no campo, não pode usar o filtro.
Exemplo:
javascript
html
Isso selecionará os dois, porque use algo como
substr
Isso significa que você deseja selecionar o produto em que "cor" contenha a string "azul" e não onde "cor" seja "azul".
fonte
<div ng-repeat="product in products | filter: { color: 'blue' }:true">
funcionará apenas em correspondências exatas (o 'verdadeiro' no final é o argumento do comparador: linkPesquisa por cor:
você pode fazer um ninho interno também.
fonte
Se você fizesse o seguinte:
... você não apenas obteria itens do itemTypeId 2 e itemStatus 1, mas também obteria itens com o itemType 20, 22, 202, 123 e itemStatus 10, 11, 101, 123. Isso ocorre porque o filtro: .} funciona como uma string que contém uma consulta.
No entanto, se você adicionar a condição : true , ele filtrará por correspondência exata:
fonte
meu jeito é esse
Exibindo assim
fonte
Você deve usar em
filter:{color_name:by_colour}
vez deSe você deseja combinar com uma única propriedade de um objeto, escreva essa propriedade em vez de objeto, caso contrário, alguma outra propriedade obterá correspondência.
fonte
Especifique a propriedade no filtro, do objeto no qual você deseja aplicar o filtro:
Mas você deseja aplicar o filtro apenas no primeiro nome
fonte
Se você deseja filtrar para um campo:
Se você deseja filtrar todos os campos:
e https://docs.angularjs.org/api/ng/filter/filter bom para você
fonte