As tabelas de dados foram introduzidas para simplificar o processo de visualização, agrupamento, consulta e classificação de dados. Normalmente, uma tabela é apenas uma forma tabular de dados e não tem nada de especial sobre ela. Mas uma tabela de dados pode oferecer vários recursos, incluindo classificação de dados, consulta de dados, atualização de dados, paginação, impressão e exportação de dados e muito mais.

Fazendo uso de uma tabela de dados em uma estrutura como Angular , que faz atualizações constantes à sua base de código, apresenta algumas complicações:

  • Código obsoleto : Angular DataTables , que seremos usando para este artigo, não oferece suporte a versões anteriores do Angular CLI (Angular 8 e inferior). Mesmo as versões mais antigas do Node e npm usam código obsoleto e, portanto, não podem usar o serviço
  • Configuração : todo desenvolvedor concordará que algumas configurações podem ser uma verdadeira dor de cabeça, e a configuração da tabela de dados no Angular não é exceção

O que é Angular DataTables?

Angular DataTables é uma biblioteca para construir tabelas HTML complexas que usa o plugin DataTables da jQuery. Ele é configurado para suportar TypeScript e otimizado para Angular 2+.

Angular DataTables será útil quando:

  • Você tem um conjunto de dados muito grande vindo de um ou mais endpoints de API
  • Você precisa de classificação/filtragem de dados personalizados
  • Você precisa exportar e imprimir dados de uma tabela

Os recursos do Angular DataTables podem ser amplamente agrupados em dois conjuntos: básicos e avançados. A partir daí, o Angular DataTables também oferece suporte a várias extensões.

Recursos básicos

  • Carregamento direto de dados usando chamadas AJAX
  • Opções como renderização de coluna em seus componentes angulares
  • Renderização de tabelas usando a função personalizada dtTrigger
  • Processamento do lado do servidor (embora você precise substituir a opção AJAX)

Recursos avançados

  • Filtragem personalizada, que abrange a filtragem por números, strings, booleanos, etc.
  • Filtragem de coluna individual, que classifica os dados por coluna
  • Re-renderização da tabela de dados
  • Várias tabelas podem ser exibidas simultaneamente
  • Links de roteador podem ser adicionados aos componentes angulares, que podem exibir uma única instância de dados em uma nova página
  • Pipes são adicionados à tabela de dados para transformar os dados no formato que você deseja

Instalando Angular DataTables

Vamos agora mergulhar na instalação e no uso do Angular DataTables. Para começar, instalaremos nosso aplicativo Angular e, em seguida, instalaremos o DataTables no aplicativo:

 ng nova tabela de dados angular 

Quando a instalação do Angular estiver concluída, você pode acessar o diretório em seu terminal e instalar o DataTables:

 cd datável angular ng adicionar tabelas de dados angulares 

Isso adicionará o jQuery e o plug-in DataTables ao seu arquivo angular.json e ao seu aplicativo. Quando a instalação estiver concluída, você pode importar seu módulo de tabela de dados em app.module.ts para usá-lo globalmente no aplicativo:

//src/app/app.module.ts import {DataTablesModule} de'angular-datatables'; importações: [ BrowserModule, AppRoutingModule, DataTablesModule,
], 

Fazendo uma chamada API

Usaremos a API JSONPlaceholder para preencher nossa tabela de dados com informações para dar uma olhada no Angular DataTables.

Para fazer isso, primeiro teremos que adicionar o módulo HttpClient em nosso arquivo app.module.ts para torná-lo acessível em nossos serviços para solicitações HTTP. Fazemos isso importando-o e chamando-o na matriz importações :

//src/app/app.module.ts importar {HttpClientModule} de'@ angular/common/http'; importações: [ BrowserModule, AppRoutingModule, DataTablesModule, HttpClientModule
], 

Criação de um serviço Angular

Criaremos um serviço Angular que se comunicará com nosso módulo HTTP para buscar dados de nossa API. Para gerar o serviço, vamos executar o comando abaixo no terminal:

 ng gerar serviços/usuários/usuários do serviço

Isso criará um novo diretório de arquivo em nossa pasta src/app contendo nosso arquivo users.services.ts :

-| Comercial/ users.service.spec.ts users.services.ts 

Podemos então importar nosso HttpClient em nosso arquivo users.service.ts :

//src/app/services/users/users.service.ts importar {HttpClient} de'@ angular/common/http'; construtor (privado http: HttpClient) {} 

A seguir, adicionamos nossa função, que obterá usuários do link da API:

 usuários () { this.http.get ('https://jsonplaceholder.typicode.com/users');
} 

Gerando um componente

Depois de criar o serviço, geramos um componente com o nome users , que conterá os dados que obtemos do serviço que acabamos de criar e os exibirá em nossa página HTML. Também usaremos o componente users para criar nossa tabela de dados e todas as funcionalidades.

Para criar um componente, basta executar o seguinte comando:

 ng gerar componentes/usuários de componentes 

Consumindo a API

Em nossos componentes users , consumiremos os dados da API obtidos do serviço que criamos e os armazenaremos em uma matriz chamada allUsers :

 importar {UsersService} de'../../services/users/users.service'; export class UsersComponent implementa OnInit { allUsers: any=[]; construtor (serviço privado: UsersService) {} ngOnInit (): void { this.users (); } usuários (): void { this.service .Comercial() .subscribe ((resposta: qualquer)=> { this.allUsers=response.data; }); } } 

Em seguida, preenchemos nosso users.component.html com nossos usuários buscados:

 
ID Nome Nome de usuário Email Número de telefone Endereço
{{user.id}} {{user.name}} {{user.username}} {{user.email}} {{user.phone}} {{user.address.street}}, {{user.address.city}}

Ele exibirá algo assim:

Tabela de dados de usuários sem estilo

Agora que isso está feito, estale os dedos porque estamos prestes a mergulhar no uso e manipulação de tabelas de dados! 😋

Adicionando nossa tabela de dados

Como já adicionamos nosso módulo de tabela de dados em app.module.ts , não teremos que importá-lo em nosso componente; simplesmente o chamamos de assunto usando rxjs :

//src/app/components/users/users.components.ts
importar {Assunto} de'rxjs';
... export class UsersComponent implementa OnInit { dtOptions: DataTables.Settings={}; dtTrigger: Assunto =novo Assunto  (); } 

Em seguida, adicionamos nossa função unsubscribe ao módulo Angular OnDestroy :

 import {Component, OnInit, OnDestroy} de'@ angular/core'; export class UsersComponent implementa OnInit, OnDestroy { ...
} ngOnDestroy (): void { this.dtTrigger.unsubscribe ();
} 

Isso redefinirá a tabela de dados sempre que deixarmos a página anexada ao componente.

Com isso, iremos agora adicionar uma tabela de dados à nossa função users e uma tabela de usuários em nosso HTML componente:

 usuários (): void { this.service .Comercial() .subscribe ((resposta: qualquer)=> { this.allUsers=resposta; //iniciar nossa tabela de dados this.dtTrigger.next (); });
} 
  ...

Filtragem e paginação foram adicionadas à tabela, como você pode notar na imagem abaixo:

Tabela de dados de usuários com filtragem e opções de paginação

Filtragem personalizada

Pode haver momentos em que desejamos pesquisar dados apresentados ao usuário final de nossa própria maneira. Os exemplos comuns incluem pesquisas de intervalo de números (entre dois números) e pesquisas de intervalo de datas. O Angular DataTables permite que você faça essas pesquisas personalizadas com facilidade e sem esforço.

N.B. , a documentação para filtragem personalizada em Angular DataTables está com defeito, principalmente por causa de atualizações no TypeScript com Angular, então siga meus exemplos.

Para iniciar a filtragem personalizada, primeiro importaremos um decorador @ViewChild , que nos permite injetar em uma classe de componente referências a elementos usados ​​dentro de seu modelo:

 import {Component, OnInit, OnDestroy, ViewChild} de'@ angular/core'; 

Em seguida, importamos DataTableDirective em nosso componente:

 import {DataTableDirective} de'angular-datatables'; 

Em seguida, referenciamos nosso DataTableDirective e o atribuímos a uma nova variável datatableElement . Depois disso, criaremos as variáveis ​​ max e min , que usarão os números máximo e mínimo para nossa filtragem personalizada.

Vamos começar com a referência:

 @ViewChild (DataTableDirective, {static: false})
datatableElement: any=DataTableDirective; 
 min: qualquer=0;
máx.: qualquer=0; 

A seguir, usamos a função personalizada para filtrar em nosso ngOnInit :

 ngOnInit (): void { ... $.fn.dataTable.ext.search.push ((configurações: qualquer, dados: string [], dataIndex: qualquer)=> { const id=parseFloat (dados [0]) || 0;//use dados para a coluna id return (Number.isNaN (this.min) && Number.isNaN (this.max)) || (Number.isNaN (this.min) && id <=this.max) || (this.min <=id && Number.isNaN (this.max)) || (this.min <=id && id <=this.max); });
} 

Isso obterá os números max e min , buscará os dados e, em seguida, atualizará a tabela de dados. A seguir, criamos uma função para filtrar a tabela de dados por id :

 filterById (): void { this.datatableElement.dtInstance.then ((dtInstance: DataTables.Api)=> { dtInstance.draw (); });
} 

Agora, ele reinicia a tabela de dados quando saímos da página:

 ngOnDestroy (): void { ... $.fn.dataTable.ext.search.pop ();
} 

Com tudo isso feito, atualizamos nossa página users.components.html para iniciar nossa função filterById :

 

E é isso-podemos usar a filtragem personalizada por id .

Extensão de botões

Conforme mencionado acima, o Angular DataTables oferece suporte a várias extensões, uma das quais é uma extensão de botões. A extensão de botões nos permite exportar e copiar os dados da nossa tabela como um arquivo. Isso é especialmente útil quando queremos compartilhar dados sem fornecer acesso ao aplicativo.

Para usar a extensão de botões DataTables, instale seu plugin usando o comando abaixo:

 # Se você deseja exportar arquivos excel
npm install jszip--save
# Arquivo JS
npm install datatables.net-buttons--save
# Arquivo CSS
npm install datatables.net-buttons-dt--save
# Typings
npm install @ types/datatables.net-buttons--save-dev

Em seguida, adicione as dependências nos atributos scripts e styles :

 { "projetos": { "nome-do-seu-aplicativo": { "arquiteto": { "construir": { "opções": { "estilos": [ ... "node_modules/datatables.net-buttons-dt/css/buttons.dataTables.css" ], "scripts": [ ... "node_modules/jszip/dist/jszip.js", "node_modules/datatables.net-buttons/js/dataTables.buttons.js", "node_modules/datatables.net-buttons/js/buttons.colVis.js", "node_modules/datatables.net-buttons/js/buttons.flash.js", "node_modules/datatables.net-buttons/js/buttons.html5.js", "node_modules/datatables.net-buttons/js/buttons.print.js" ], ...
} 

Em seguida, incluímos as configurações em nosso ngOnInit :

 ngOnInit (): void { this.dtOptions={ //Declara o uso da extensão no parâmetro dom dom:'Bfrtip', };
} 

E aqui está o resultado-os botões Copiar , Excel , CSV e Imprimir foram adicionados:

Tabela de dados de usuários com botões adicionados

Existem muito mais opções para escolher quando se trata de personalizar sua tabela de dados. Com alguns ajustes, você pode moldá-lo de acordo com suas especificações e ficará perfeito para o que quer que você esteja construindo.

Concluindo

E com isso, apresentamos o Angular DataTables e seus recursos. Também o aplicamos a um aplicativo, usamos alguns de seus recursos e exploramos a extensão de botões. Fiz algumas modificações na documentação original por causa das atualizações no Angular TypeScript. Espero que este tutorial tenha fornecido uma análise simples e fácil de seguir de como usar Angular DataTables em seu aplicativo Angular.

A postagem Usando Angular DataTables para construir tabelas ricas em recursos apareceu primeiro no LogRocket Blog .

Source link