Olá, pessoal!
Vamos ver hoje como ordenar os dados em ordem crescente ou decrescente por coluna quando for clicado. É bem simples fazer isso.
Para separar o exemplo do artigo anterior, apenas dupliquei o filteradvance2.html e criei uma nova rota. Então, o resultado dos exemplos mostrado no artigo você deve ver no arquivo filteradvance2.html.Veja como ficou a rota:
app.js when("/filteradvance2", { templateUrl : "filteradvance2.html", controller:filterController }).
Abra o arquivo index.html e vamos adicionar bootstrap css no head:
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.1.1/css/bootstrap-combined.min.css" rel="stylesheet">
Vamos precisar para usar um ícone na coluna.
Abra o arquivo filteradvance2.html e vamos dar continuidade. Para ordenar dados, temos o filter orderBy – no nosso caso vamos dizer que a ordenação vai acontecer com base na coluna que foi clicada. Portanto, vamos fazer isso aqui no head da coluna:
<thead> <th ng-click="sort('name')">Name <i ng-class="{'icon-chevron-up':isSortUp('name'),'icon-chevron-down':isSortDown('name')}"></i> </th> <th ng-click="sort('lastname')">Lastname <i ng-class="{'icon-chevron-up':isSortUp('lastname'),'icon-chevron-down':isSortDown('lastname')}"></i> </th> <th ng-click="sort('age')">Age <i ng-class="{'icon-chevron-up':isSortUp('age'),'icon-chevron-down':isSortDown('age')}"></i> </th> </thead>
Vamos entender agora. A função sort em ng-click ainda não existe e a criaremos agora. Ela basicamente recebe a propriedade que deve ser ordenada. Na tag <i /> inserimos o ícone e criamos duas funções (uma para ordem crescente e outra pra decrescente, que também vai receber a propriedade para ordenar).
Criando as funções no controller
Agora vamos dar carne ao esqueleto, criando as funções no filterController:
//restante do codigo omitido $scope.sortField = undefined; $scope.reverse = false; $scope.isSortUp = function(fieldName){ return $scope.sortField === fieldName && !$scope.reverse; }; $scope.isSortDown = function(fieldName){ return $scope.sortField === fieldName && $scope.reverse; }; //order data $scope.sort = function(fieldName){ if ($scope.sortField === fieldName) { $scope.reverse = !$scope.reverse; }else{ $scope.sortField = fieldName; $scope.reverse = false; }; }
Vamos testar? Portanto vamos clicar na coluna Name da tabela e ver o acontece:
Ficou ordenado de forma crescente, agora vamos clicar novamente:
Simples, não? Vou ficando por aqui…
Abraços!