Front End

4 fev, 2015

Série AngularJS – Usando Filter com search

100 visualizações
Publicidade

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:

filteradvancedfilter

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:

filteradvancedsearch

Observe que o resultado considera qualquer valor na tabela, agora digitei um número e foi considerado o atributo age.

filteradvancedsearch2

Se digitarmos um valor que não existe a tabela fica vazia:

filteradvancedempetytable

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:

filteradvancesearchname

Se tentarmos pesquisar pela idade, não vai rolar:

filteradvancedagefailure

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:

filteradvancedtotalrecord

Com filtro:

filteradvancedtotalrecordfilter

Vou ficando por aqui…

Por hoje é isso! Espero que tenham gostado do artigo. Simples não?

Abraços!