Front End

15 abr, 2014

Série AngularJS: Usando filter – Parte 13

Publicidade

Olá, pessoal!

No artigo de hoje vamos ver como usar o recurso de filter do AngularJS. A ideia é que quando o usuário digite um caractere válido a algum dado dentro do filter, este seja retornado. Vou mostrar dois exemplos, um retornando por idade e outro pelo nome.

Vamos usar o ng-repeat e o atributo filter. O código é tão simples que nem parece verdade. Considerando que você já tenha a estrutura do AngularJS, então vou ignorar todo o setup básico. Para o artigo estou usando o recurso de rotas simplesmente para facilitar (além do fato de ser bacana), mas não é requerido que seu projeto esteja usando rotas. 

Criando o controller

Eu tenho um arquivo de controller.js e nele tem todos os controllers. Claro que fiz isso para facilitar nos exemplos da série. Em um projeto o ideal é termos isso separado e não colocar todos os controllers em um único arquivo.

var filterController = function($scope) {
	$scope.friends = [ {
		name : "Camilo",
		age : 20
	}, {
		name : "Lopes",
		age : 55
	}, {
		name : "Madruga",
		age : 60
	}, {
		name : "Ana",
		age : 30
	} ];
};

Não tem nada demais, apenas um array com informações de alguns amigos.

Criando HTML

Vamos criar o HTML, pois é onde está a magia. Chamei o meu de filterorder.html. A seguir, o conteúdo:

<!-- by age only-->
	<div>
		<label>Search by age</label> <input ng-model="ageValue" />
		<ul
ng-repeat="friend in friends | filter:{name:query,age:ageValue}|orderBy:'name'">
			<li>{{friend.name}} ({{friend.age}})</li>
		</ul>
	</div>
	<!-- by name only-->
	<div>
		<label>Search by name</label> <input ng-model="nameValue" />
		<ul
ng-repeat="friend in friends | filter:{name:query,name:nameValue}|orderBy:'name'">
			<li>{{friend.name}} ({{friend.age}})</li>
		</ul>
	</div>

	<!-- by age and name -->
	<div>
		<label>Search by age and name</label> <input ng-model="query" />
		<ul
		ng-repeat="friend in friends | filter:query|orderBy:'name'">
			<li>{{friend.name}} ({{friend.age}})</li>
		</ul>
	</div>

Testando

Vamos ver o resultado válido:

angularjsfiltersearch (1)

Observe que não digitei nada, portanto foi exibido todo o meu array.

angularjsfiltervalid (1)

Observe o resultado acima. Busquei pela idade, em seguida informei o nome e por último apenas digitei parcial e o AngularJS já me retornou.

Agora vamos ver o lado inválido:

angularjsfilterinvalid (1)

Nem preciso falar, né? Realmente muito simples a implementação, e o resultado é fantástico.

Vou ficando por aqui e espero que tenham gostado do artigo.

Abraços!