Dê uma olhada no exemplo aqui: http://docs.angularjs.org/api/ng.filter:filter
Você pode pesquisar por qualquer uma das propriedades do telefone usando <input ng-model="search">
e pode pesquisar apenas pelo nome usando <input ng-model="search.name">
, e os resultados são filtrados apropriadamente por nome (digitar um número de telefone não retorna nenhum resultado, como esperado).
Digamos que eu tenho um modelo com uma propriedade "nome", uma propriedade "telefone", e uma propriedade "segredo", como eu iria sobre como filtrar por tanto o "nome" e as propriedades "Telefone" e não a propriedade "secreto" ? Então, em essência, o usuário poderia digitar um nome ou número de telefone e o ng-repeat
filtraria corretamente, mas mesmo se o usuário digitasse um valor que fosse igual a parte de um valor "secreto", ele não retornaria nada.
Obrigado.
ng-model
(especificandosearch.name
no campo INPUTng-model
) resultaria nos objetos a serem repetidos sendo filtrados por suaname
propriedade? Ou seja, intuitivamente para mim, você deve ser capaz de filtrar especificamente apenasname
especificando em seung-repeat
filtrofilter: friend.name
:, em vez de `escrever` <input ng-model = "search.name"> ...Respostas:
Aqui está o êmbolo
Novo plunker com código mais limpo e em que os itens da lista de consulta e pesquisa não diferenciam maiúsculas de minúsculas
A ideia principal é criar uma função de filtro para atingir esse objetivo.
Do doc oficial
Atualizar
Algumas pessoas podem se preocupar com o desempenho no mundo real, o que é correto.
No mundo real, provavelmente faríamos esse tipo de filtro do controlador.
Aqui está a postagem detalhada mostrando como fazer isso.
em suma, adicionamos
ng-change
à entrada para monitorar novas alterações de pesquisae então acionar a função de filtro.
fonte
item.brand.indexOf($scope.query)!=-1 || item.model.indexOf($scope.query)!=-1)
Você pode passar um Object como parâmetro para sua expressão de filtro, conforme descrito na Referência da API . Esse objeto pode aplicar seletivamente as propriedades de seu interesse, como:
Aqui está um Plunker
Atenção ... este exemplo funciona muito bem com AngularJS 1.1.5, mas nem sempre tão bem em 1.0.7. Neste exemplo, 1.0.7 será inicializado com tudo filtrado e, em seguida, funcionará quando você começar a usar as entradas. Ele se comporta como se as entradas tivessem valores não correspondentes, embora comecem em branco. Se você deseja manter as versões estáveis, vá em frente e experimente isso para sua situação, mas alguns cenários podem querer usar a solução de @maxisam até o lançamento de 1.2.0.
fonte
Eu me inspirei na resposta de @maxisam e criei minha própria função de classificação e pensei em compartilhá-la (porque estou entediado).
Situação que desejo filtrar em uma série de carros. As propriedades selecionadas para filtrar são nome, ano, preço e km. O preço da propriedade e km são números (daí o uso de
.toString
). Eu também quero controlar para letras maiúsculas (portanto.toLowerCase
). Também quero ser capaz de dividir minha consulta de filtro em palavras diferentes (por exemplo, dado o filtro 2006 Acura, ele encontra correspondências 2006 com o ano e Acura com o nome).Função que passo para filtrar
fonte
Se você estiver aberto para usar bibliotecas de terceiros, 'Filtros angulares' com uma boa coleção de filtros pode ser útil:
https://github.com/a8m/angular-filter#filterby
fonte
Espero que esta resposta ajude, Multiple Value Filter
E um exemplo de trabalho neste violino
fonte
Há um monte de boas soluções aqui, mas eu sugiro seguir o outro caminho com isso. Se pesquisar é a coisa mais importante e a propriedade 'secreta' não é usada na visualização; minha abordagem para isso seria usar o filtro angular integrado com todos os seus benefícios e simplesmente mapear o modelo para uma nova matriz de objetos.
Exemplo da pergunta:
Agora, em html, basta usar o filtro regular para pesquisar essas propriedades.
fonte
Abordagem bastante direta usando filterBy em angularJs
Para trabalhar com o plnkr, siga este link
http://plnkr.co/edit/US6xE4h0gD5CEYV0aMDf?p=preview
Isso usou especialmente uma única propriedade para pesquisar várias colunas, mas não todas.
controlador
fonte
Resolvi isso simplesmente:
fonte
http://plnkr.co/edit/A2IG03FLYnEYMpZ5RxEm?p=preview
Aqui está uma pesquisa com distinção entre maiúsculas e minúsculas que também separa sua pesquisa em palavras para pesquisar em cada modelo. Somente quando encontrar um espaço, ele tentará dividir a consulta em um array e, em seguida, pesquisar cada palavra.
Ele retorna verdadeiro se todas as palavras estiverem em pelo menos um dos modelos.
fonte
O filtro pode ser um objeto JavaScript com campos e você pode ter uma expressão como:
fonte
Eu gosto de manter é simples quando possível. Eu precisava agrupar por Internacional, filtrar em todas as colunas, exibir a contagem para cada grupo e ocultar o grupo se nenhum item existisse.
Além disso, eu não queria adicionar um filtro personalizado apenas para algo simples como isso.
fonte
Posso chegar muito tarde, mas foi o que acabei fazendo. Fiz um filtro muito geral.
Então use assim
Sua caixa de pesquisa seja como
onde name e device_id são propriedades em dvs
fonte
Esta é uma solução simples para quem deseja um filtro rápido contra um objeto:
O filtro de matriz permite que você imite o objeto que está tentando filtrar. No caso acima, as seguintes classes funcionariam perfeitamente:
E onde o baralho pode ser:
E se você quiser filtrar várias propriedades do objeto, apenas separe os nomes dos campos com uma vírgula:
EDIT: Aqui está um plnkr de trabalho que fornece um exemplo de filtros de propriedade única e múltipla:
http://embed.plnkr.co/i0wCx6l1WPYljk57SXzV/
fonte
ng-repeat
. No entanto, seu exemplo parece um pouco complicado: há alguma maneira de resumi-lo? Eu sei que a questão é essencialmente procurar um único campo de pesquisa que pode filtrar apenas por propriedades selecionadas. Em seu exemplo, parece que estamos filtrando por nomes de valor facial ou números, mas não ambos. Se eu não estiver entendendo seu exemplo, por favor me avise!