Tabela AngularJS: Classificar com orderBy e filtro de maiúsculas
⚡ Resumo Inteligente
A classificação, ordenação e formatação de texto em tabelas AngularJS dependem da diretiva `ng-repeat` e de uma expressão de filtro. Esta página mostra como `orderBy`, `uppercase`, `filter` e `$index` transformam uma tabela HTML simples em uma grade dinâmica e orientada a dados.
As tabelas são um dos elementos comuns usados em HTML ao trabalhar com páginas da web.
Tabelas em HTML são projetados usando a tag HTML
- tag – Esta é a tag principal usada para exibir a tabela.
- – Esta tag é usada para segregar as linhas da tabela.
- – Esta tag é usada para exibir os dados reais da tabela.
- – Isso é usado para os dados do cabeçalho da tabela.
Usando as tags HTML disponíveis acima junto com AngularJS, podemos facilitar o preenchimento dos dados da tabela. Resumindo, a diretiva ng-repeat é usada para preencher os dados da tabela.
Neste capítulo, veremos como alcançar esse objetivo. Também veremos como usar os filtros `orderBy` e `uppercase`, além do atributo `$index`, para exibir os índices de uma tabela do AngularJS. O primeiro passo é a própria marcação (`markup`).
Preencher e exibir dados em uma tabela
Conforme discutimos na introdução deste capítulo, a base para a criação da estrutura da tabela em uma página HTML permanece a mesma.
A estrutura da tabela ainda é criada usando as tags HTML normais de , , e . No entanto, os dados são preenchidos usando a diretiva ng-repeat no AngularJS.
Vejamos um exemplo simples de como podemos implementar tabelas no AngularJS.
Neste exemplo,
Vamos criar uma tabela em AngularJS que conterá os tópicos dos cursos juntamente com suas descrições.
Passo 1) Primeiro adicionaremos uma tag “style” à nossa página HTML para que a tabela possa ser exibida como uma tabela adequada.
- A tag de estilo é adicionada à página HTML. Esta é a maneira padrão de adicionar quaisquer atributos de formatação necessários para elementos HTML.
- Estamos adicionando dois valores de estilo à nossa tabela.
- Uma delas é que deve haver uma borda sólida para nossa tabela AngularJS e
- Em segundo lugar, devemos adicionar espaçamento (padding) aos dados da nossa tabela AngularJS.
Passo 2) A próxima etapa é escrever o código para gerar a tabela e seus dados.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
⚠️ Aviso: Esta lista foi reproduzida exatamente como publicada, e quatro linhas nela estão incorretas. chrset erros ortográficos charsetTrês versões do AngularJS são carregadas simultaneamente, o que é uma a mais do que o necessário. lib/bootstrap.js e lib/bootstrap.css não existem. Mantenha angular.min.js só.
Code Explicação
- Primeiro, estamos criando uma variável chamada “tutorial” e atribuindo a ela alguns pares de valores-chave em uma única etapa. Cada par de valores-chave será usado como dados ao exibir a tabela. A variável tutorial é então atribuída ao objeto de escopo para que possa ser acessada a partir de nossa visualização.
- Este é o primeiro passo na criação de uma tabela e usamos o método marcação.
- Para cada linha de dados, estamos usando a “diretiva ng-repeat”. Esta diretiva passa por cada par de valores-chave no objeto de escopo do tutorial usando a variável ptutor.
- Finalmente, estamos usando o tag junto com os pares de valores-chave (ptutor.Name e ptutor.Description) para exibir os dados da tabela AngularJS.
Se o código for executado com sucesso, a seguinte saída será mostrada quando você executar o código no navegador.
saída
Da saída acima,
- Podemos ver que a tabela é exibida corretamente com os dados do array de pares chave-valor definidos no controlador.
- Os dados da tabela foram gerados percorrendo cada um dos pares de valores-chave usando a “diretiva ng-repeat”.
As linhas brutas são apenas o ponto de partida, pois os filtros decidem como essas linhas são ordenadas e formatadas.
Filtro embutido AngularJS
É muito comum usar filtros embutidos no AngularJS para alterar a forma como os dados são exibidos nas tabelas. Já vimos filtros em ação em um capítulo anterior. Vamos recapitular rapidamente os filtros antes de prosseguirmos.
Em AngularJS, os filtros são usados para formatar o valor de uma expressão antes de exibi-la ao usuário. Um exemplo de filtro é o filtro 'uppercase', que recebe uma string como saída, formata-a e exibe todos os caracteres da string em maiúsculas.
Portanto, no exemplo abaixo, se o valor da variável 'TutorialName' for 'AngularJS', a saída da expressão abaixo será 'ANGULARJS'.
{{ TutorialName | uppercase }}
Nesta seção, veremos como os filtros orderBy e maiúsculas podem ser usados em tabelas com mais detalhes.
Filtros comuns do AngularJS usados com tabelas
A tabela abaixo compara os filtros mais frequentemente usados dentro de uma expressão ng-repeat.
| Filtrar | Propósito | Exemplo |
|---|---|---|
| ordenar por | Classifica as linhas por uma chave. | | orderBy : 'Name' |
| filtro | Mantém as linhas correspondentes | | filter : searchText |
| maiúsculas | Texto em maiúsculas | | uppercase |
| minúsculas | Reduz o texto | | lowercase |
| limitePara | Contagem de linhas de maiúsculas | | limitTo : 25 |
| moeda | Formatos de dinheiro | | currency : '$' |
| dados | Formatos de datas | | date : 'dd MMM yyyy' |
| número | Define decimais | | number : 2 |
A ordenação é o filtro que os leitores mais solicitam, portanto, o filtro orderBy vem em seguida.
Classificar tabela com filtro OrderBy
Este filtro é usado para classificar a tabela com base em uma das colunas da tabela. No exemplo anterior, a saída para os dados da nossa tabela AngularJS apareceu como mostrado abaixo.
| controladores | Controladores em ação |
| Modelos | Modelos e dados vinculativos |
| instruções | Flexibilidade das Diretivas |
Vejamos um exemplo de como podemos usar o filtro "orderBy" e classificar os dados da tabela AngularJS usando a primeira coluna da tabela.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial | orderBy : 'Name'"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
Code Explicação
- Estamos usando o mesmo código que usamos para criar nossa tabela, a única diferença desta vez é que estamos usando o filtro “orderBy” junto com a diretiva ng-repeat. Neste caso, estamos dizendo que queremos ordenar a tabela pela chave “Nome”.
Se o código for executado com sucesso, a seguinte saída será mostrada quando você executar o código no navegador.
saída
Da saída,
- Podemos ver que os dados na tabela AngularJS foram classificados de acordo com os dados da primeira coluna. O array é declarado na ordem Controllers, Models, Directives, portanto, sem um filtro, as linhas aparecem nessa ordem. Aplicando
orderBy : 'Name'Organiza os valores de Nome em ordem alfabética, o que coloca as Diretivas à frente dos Modelos e produz Controladores, Diretivas e Modelos.
Classificar em Reverse e dos cabeçalhos das colunas
O filtro orderBy aceita um segundo argumento. Passando true inverte a direção, e armazenar tanto a chave quanto esse sinalizador no escopo permite que um leitor reordene a tabela clicando em um cabeçalho, como o ordenar por referência descreve.
<table> <tr> <th ng-click="sortKey='Name'; reverse=!reverse">Name</th> <th ng-click="sortKey='Description'; reverse=!reverse">Description</th> </tr> <tr ng-repeat="ptutor in tutorial | orderBy : sortKey : reverse"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table>
A ordenação altera a sequência das linhas. O próximo filtro altera a forma como uma única coluna é exibida.
Tabela de exibição com filtro de letras maiúsculas
Também podemos usar o filtro de maiúsculas para converter os dados da tabela AngularJS para letras maiúsculas.
Vejamos um exemplo de como podemos conseguir isso.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial"> <td>{{ptutor.Name | uppercase}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
Code Explicação
- Estamos usando o mesmo código que usamos para criar nossa tabela, a única diferença desta vez é que estamos usando o filtro de letras maiúsculas. Estamos utilizando este filtro em conjunto com “ptutor.Name” para que todo o texto da primeira coluna seja exibido em maiúsculas.
Se o código for executado com sucesso, a seguinte saída será mostrada quando você executar o código no navegador.
saída
Da saída,
- Podemos observar que ao utilizar o filtro “maiúsculas”, todos os dados da primeira coluna são exibidos com caracteres maiúsculos.
Formatar uma coluna é útil, e os leitores geralmente desejam um número de linha ao lado dela.
Exibir o índice da tabela ($index)
Para exibir o índice da tabela, adicione um com $ índice.
Vejamos um exemplo de como podemos conseguir isso.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial"> <td>{{$index + 1}}</td> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
Code Explicação
- Estamos usando o mesmo código que usamos para criar nossa tabela, a única diferença desta vez é que estamos adicionando uma linha extra à nossa tabela para exibir a coluna de índice. Nesta coluna adicional, estamos usando a propriedade “$index” fornecido pelo AngularJS e depois usando o operador +1 para incrementar o índice para cada linha.
Se o código for executado com sucesso, a seguinte saída será mostrada quando você executar o código no navegador.
saída
Da saída,
- Você pode ver que uma coluna adicional foi criada. Nesta coluna podemos ver os índices sendo criados para cada linha.
Três linhas cabem em uma tela. Um conjunto de dados realista não cabe, então os leitores precisam de uma maneira de pesquisá-lo.
Como filtrar e pesquisar dados de tabela no AngularJS
O AngularJS inclui um filtro chamado filterColocado após o ng-repeat, ele compara cada item da matriz com um valor e mantém apenas as linhas correspondentes. Vincule esse valor a uma caixa de texto com ng-model e a tabela se restringe automaticamente enquanto o leitor digita, sem a necessidade de manipuladores de eventos ou código de controlador.
Adicionar uma pesquisa ao vivo Box
Adicione um campo de entrada acima da tabela e passe o array pelo filtro. Os dois compartilham a mesma propriedade de escopo, então o AngularJS reavalia a expressão a cada tecla pressionada.
<input type="text" ng-model="searchText" placeholder="Search topics"> <table> <tr ng-repeat="ptutor in tutorial | filter : searchText"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table>
Code Explicação:
- O campo de entrada grava tudo o que for digitado.
searchTextno escopo. filter : searchTextmantém linhas cujo nome ou Description contém essa substring, ignorando maiúsculas e minúsculas.- Para pesquisar em uma única coluna, passe um objeto:
filter : {Name : searchText}. - Os filtros encadeiam, então
| filter : searchText | orderBy : 'Name'Primeiro realiza a busca e depois classifica os sobreviventes.
Mantenha as mesas grandes responsivas
Um problema comum encontrado durante o desenvolvimento com tabelas AngularJS é um grande conjunto de dados contendo mil linhas ou mais. ng-repetir A diretiva cria um escopo e um observador por linha, permitindo que a página pare de responder. Em vez disso, distribua as linhas por várias páginas e adicione track by Assim, as linhas existentes são reutilizadas em vez de serem reconstruídas.
<tr ng-repeat="ptutor in tutorial | filter : searchText | limitTo : 25 track by ptutor.Name">










