Diretiva ng-repeat
A diretiva ng-repeat
é utilizada para repetir uma parte da view (template) conforme uma expressão de repetição baseada no model. O exemplo a seguir demonstra a utilização desta diretiva.
O arquivo index.html
:
{%raw%}
<!DOCTYPE html>
<html lang="pt-br" ng-app="appsimples">
<head>
<meta charset="utf-8" />
<title>App Simples</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="style.css" />
<script>document.write('<base href="' + document.location + '" />');</script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="HomeController">
<div class="container">
<h1>Cidades do Tocantins</h1>
<p>A lista abaixo apresenta algumas cidades do Tocantins:</p>
<ul>
<li ng-repeat="cidade in cidades">{{cidade}}</li>
</ul>
</div>
</body>
</html>
{%endraw%}
O arquivo app.js
:
{%raw%}
(function(){
angular.module('appsimples', [])
.controller('HomeController', function($scope) {
$scope.cidades = ['Araguaína', 'Gurupi', 'Palmas', 'Paraíso', 'Porto Nacional'];
});
})();
{%endraw%}
Você pode ver o exemplo em funcionamento aqui.
No arquivo index.html
(a view), na linha 22, a diretiva ng-repeat
é aplicada ao elemento li
. Neste caso, o uso da diretiva, baseada na expressão cidade in cidades
, faz com que o elemento (e seu conteúdo) seja repetido conforme a quantidade de elementos em cidades
(esperando-se que seja um vetor). No conteúdo do li
está uma expressão que apresenta o nome de cada cidade da iteração.
No arquivo app.js
, no controller HomeController
, na linha 5, temos a definição do array cidades
(com os elementos que são apresentados na view).
Filtrando o ng-repeat
Uma funcionalidade bastante interessante dos filtros em Angular é percebida ao serem aplicados à diretiva ng-repeat
. O exemplo a seguir demonstra isso.
O arquivo index.html
:
{%raw%}
<!DOCTYPE html>
<html lang="pt-br" ng-app="appsimples">
<head>
<meta charset="utf-8" />
<title>App Simples</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="style.css" />
<script>document.write('<base href="' + document.location + '" />');</script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="HomeController">
<div class="container">
<h1>Cidades do Tocantins</h1>
<p>A lista abaixo apresenta algumas cidades do Tocantins:</p>
<ul>
<li ng-repeat="cidade in cidades | filter:'Ara'">{{cidade}}</li>
</ul>
</div>
</body>
</html>
{%endraw%}
O arquivo app.js
:
{%raw%}
(function(){
angular.module('appsimples', [])
.controller('HomeController', function($scope) {
$scope.cidades = ['Araguaína', 'Gurupi', 'Palmas', 'Paraíso', 'Porto Nacional'];
});
})();
{%endraw%}
Você pode ver o exemplo em funcionamento aqui.
Na view, na linha 22, o conteúdo da diretiva ng-repeat
foi modificado de modo a incluir o filtro filter
. Neste caso, o array cidades
está sendo filtrado, de forma que apenas serão apresentadas as cidades que têm "Ara" como parte do nome.
O exemplo a seguir é mais funcional: filtra os elementos do vetor cidades
com base em uma entrada do usuário.
O arquivo index.html
:
{%raw%}
<!DOCTYPE html>
<html lang="pt-br" ng-app="appsimples">
<head>
<meta charset="utf-8" />
<title>App Simples</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="style.css" />
<script>document.write('<base href="' + document.location + '" />');</script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="HomeController">
<div class="container">
<h1>Cidades do Tocantins</h1>
<p>A lista abaixo apresenta algumas cidades do Tocantins:</p>
<p>
<div class="input-group">
<input type="text" class="form-control" ng-model="q" placeholder="Pesquisar...">
<span class="input-group-addon">
<span class="glyphicon glyphicon-search"></span>
</span>
</div>
</p>
<ul>
<li ng-repeat="cidade in cidades | filter:q">{{cidade}}</li>
</ul>
</div>
</body>
</html>
{%endraw%}
O arquivo app.js
:
{%raw%}
(function(){
angular.module('appsimples', [])
.controller('HomeController', function($scope) {
$scope.cidades = ['Araguaína', 'Gurupi', 'Palmas', 'Paraíso', 'Porto Nacional'];
});
})();
{%endraw%}
Você pode ver o exemplo em funcionamento aqui.
Na view, na linha 23, o elemento input
está vinculado ao elemento do model q
. Desta forma, na linha 28, o filtro é baseado neste elemento do model, não em um valor definido diretamente no código.
Propriedades
Propriedades especiais são expostas com a utilização da diretiva ng-repeat
:
Propriedade |
Tipo |
Descrição |
$index |
número |
Índice da iteração |
$first |
booleano |
Indica se a iteração é a primeira |
$middle |
booleano |
Indica se a iteração não é a primeira e nem a última |
$last |
booleano |
Indica se a iteração é a última |
$even |
booleano |
Indica se o índice da iteração é par |
$odd |
booleano |
Indica se o índice da iteração é ímpar |