Olá, pessoal!
No artigo de hoje vamos ver como usar o Filter com recursos bem interessantes e que certamente aparece no requisito do cliente. Um deles é ao digitar um valor no campo search, o conteúdo da tabela ser filtrado a medida que digitamos, algo assim:
O resultado final do artigo está no meu github no repositório workspaceAngularJS dentro do projeto receipeangularjsexample. Para quem não conhece, criei esse projeto somente para ir colocando exemplos isolados com angularJS e que vou compartilhando aqui no blog. Eu já expliquei filter outras vezes aqui no blog, então vou usar o controller já existente no exemplo acima que está dentro do arquivo recipeController.js, que está assim:
var filterController = function($scope) {
$scope.friends = [ {
name : "Camilo",
lastname:"Lopes",
age : 20
}, {
name : "Chapolin",
lastname:"Santana",
age : 55
}, {
name : "Madruga",
lastname:"Santos",
age : 60
}, {
name : "Ana",
lastname:"Lopes",
age : 30
} ];
};
Agora vamos configurar uma rota para o nosso exemplo, em app.js vamos configurar assim:
//restante do código omitido
when("/filteradvance", {
templateUrl : "filteradvance.html",
controller:filterController
}).
E por último vamos criar um arquivo filteradvance.html assim:
<!--table with search-->
<div class="well">
<label>Search for:<input type="text" ng-model="criteria"></label>
</div>
<table class="table table-bordered">
<thead>
<th>Name</th>
<th>Lastname</th>
<th>Age</th>
</thead>
<tbody>
<tr ng-repeat="friend in friends | filter:criteria">
<td>{{friend.name}}</td>
<td>{{friend.lastname}}</td>
<td>{{friend.age}}
</tr>
</tbody>
</table>
Vamos entender o código
Observe que criei no input do search um ng-model, a variável que terá o valor digitado. No ng-repeat, apenas mandei filtrar pelo valor da variável critério, então quando digitarmos algo e corresponder a algum conteúdo da tabela, teremos apenas os dados relacionado, veja:
Observe que o resultado considera qualquer valor na tabela, agora digitei um número e foi considerado o atributo age.
Se digitarmos um valor que não existe a tabela fica vazia:
Agora, se queremos considerar apenas o campo name como critério para pesquisa, ou seja, os demais atributos devem ser ignorados. Como seria? Veja:
ng-repeat="friend in friends | filter:{name:criteria}"
Pronto, informamos que a pesquisa deve ser pelo name:
Se tentarmos pesquisar pela idade, não vai rolar:
Ao pesquisar por uma idade válida obtemos, a tabela vazia.
E se eu quiser saber a quantidade de registro na tabela e quando for filtrado? É assim:
ng-repeat="friend in friendsFiltered = (friends | filter:criteria)"
Precisamos criar uma variável para obter os valores filtrados e exibir o tamanho em seguida:
Total Record: {{friendsFiltered.length}}
O resultado:
Com filtro:
Vou ficando por aqui…
Por hoje é isso! Espero que tenham gostado do artigo. Simples não?
Abraços!











