Angular 7 - Realizando a paginação de dados
Hoje veremos como realizar a paginação de dados no Angular 6 (Angular 7). |
A paginação permite que as informações sejam divididas entre páginas; o objetivo é evitar apresentar em uma única página uma grande quantidade de dados, o que pode ser difícil de tratar e também pode impactar o desempenho do seu projeto.
Neste primeiro contato vamos usar dados em memória para mostrar como realizar a paginação de dados.
Criando um aplicação Angular
Vamos usar o Angular CLI para criar nossa aplicação Angular que vai paginar dados.
Nota: Para verificar a versão do seu Angular CLI digite: ng --version
O comando : npm install -g @angular/cli instala o Angular CLI.
|
Vamos criar a aplicação angular em uma pasta reservada para projetos angular: c:\_angular_2019
Entre na pasta do projeto e a seguir abra uma prompt de comandos e digite o comando : ng new paginacao1
Será criado um projeto Angular na pasta paginacao1. Vamos entrar na pasta digitando: cd paginacao1
A seguir digite o comando : code .
Isso vai abrir o projeto no Visual Studio Code:
O
arquivo package.json é onde ficam as
dependências do projeto Na pasta src temos a pasta app onde estão os componentes da aplicação O arquivo tsconfig.json é o arquivo de configuração TypeScript; |
Dentro da pasta src temos a pasta app onde vamos criar os componentes da nossa aplicação.
Na
pasta app temos o arquivo app.component.ts
que contém a classe Component chamada de
AppComponent onde definimos o que vamos
exibir ao usuário.
Um componente é um recurso utilizado para criar uma classe responsável por controlar e manter o estado de uma view. O arquivo app.component.html é onde vamos exibir a nossa aplicação. O arquivo app.module.ts contém a classe AppModule é responsável por expor para a aplicação algum código específico, que pode ser uma classe, uma função, ou mesmo uma constante. |
Se você estiver usando o Angular 7 talvez tenha que atualizar o pacote: @angular-devkit/build-angular
Se o pacote usado estiver em uma versão anterior a : 0.13.0, então desinstale a versão usada no projeto e instale a versão 0.13.0 :
npm uninstall @angular-devkit/build-angular
npm install @angular-devkit/build-angular@0.13.0
Usando o componente ngx-pagination
Para realizar a paginação no Angular vamos usar o componente ngx-pagination cuja documentação pode ser consultada neste link: http://michaelbromley.github.io/ngx-pagination/#/
Para instalar o componente no projeto digite o seguinte comando a partir da pasta do projeto:
npm install ngx-pagination --save
A seguir abra o arquivo app.module.ts e importe o módulo NgxPaginationModule :
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { NgxPaginationModule } from 'ngx-pagination';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
NgxPaginationModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
|
Definindo os dados usados para paginação
Abra o arquivo app.component.ts e inclua o código a seguir onde criamos um array de dados que serão usados para demonstração:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'Paginação Angular 7';
public dadosAlunos=[];
pag : Number = 1 ;
contador : Number = 5;
constructor() {
console.log('Aplicação iniciada, Carregando dados...');
this.dadosAlunos = [
{ 'id': 1, 'nome': 'Clare Cornau', 'fone': '(815) 6180492', 'email': 'ccornau0@bigcartel.com', 'sexo': 'Feminino', 'pais': 'Somalia' },
{ 'id': 2, 'nome': 'Edouard Elsmore', 'fone': '(507) 3119958', 'email': 'eelsmore1@goo.gl', 'sexo': 'Masculino', 'pais': 'United States' },
{ 'id': 3, 'nome': 'Aeriel Elldred', 'fone': '(478) 7181722', 'email': 'aelldred2@archive.org', 'sexo': 'Feminino', 'pais': 'Russia' },
{ 'id': 4, 'nome': 'Yan Chi Mung', 'fone': '(698) 4411762', 'email': 'ameachem3@columbia.edu', 'sexo': 'Feminino', 'pais': 'China' },
{ 'id': 5, 'nome': 'Jeremiah Hadwen', 'fone': '(345) 6582965', 'email': 'jhadwen4@contakte.ru', 'sexo': 'Masculino', 'pais': 'Mongolia' },
{ 'id': 6, 'nome': 'Romilada Andrade', 'fone': '(659) 9557733', 'email': 'romildandr@times.com', 'sexo': 'Masculino', 'pais': 'Belgica' },
{ 'id': 7, 'nome': 'Ramirez Gonzales', 'fone': '(864) 2101861', 'email': 'ramgonz@yellowbook.com', 'sexo': 'Masculino', 'pais': 'Peru' },
{ 'id': 8, 'nome': 'Jayme Crotty', 'fone': '(165) 5814372', 'email': 'jcrotty7@opensource.org', 'sexo': 'Masculino', 'pais': 'Niger' },
{ 'id': 9, 'nome': 'Margo Braker', 'fone': '(428) 2282928', 'email': 'mbraker8@yahoo.co.jp', 'sexo': 'Feminino', 'pais': 'Argentina' },
{ 'id': 10, 'nome': 'Bernardo Guzman', 'fone': '(673) 5170425', 'email': 'bernardguz@google.com', 'sexo': 'Feminino', 'pais': 'Uruguai' },
{ 'id': 11, 'nome': 'Darelle Rowlands', 'fone': '(978) 8885907', 'email': 'drowland@slate.com', 'sexo': 'Feminino', 'pais': 'Indonesia' },
{ 'id': 12, 'nome': 'Neile Keets', 'fone': '(956) 9360112', 'email': 'nkeetsb@canalblog.com', 'sexo': 'Feminino', 'pais': 'Finlandia' },
{ 'id': 13, 'nome': 'Sonia Buarque', 'fone': '(055) 7150720', 'email': 'soniabuarque@so-net.net', 'sexo': 'Feminino', 'pais': 'Brasil' },
{ 'id': 14, 'nome': 'Ana Maria Rocha', 'fone': '(055) 4076124', 'email': 'anamaria@com.com', 'sexo': 'Masculino', 'pais': 'Brasil' },
{ 'id': 15, 'nome': 'Carola Balasin', 'fone': '(262) 7945277', 'email': 'cbalasine@blogger.com', 'sexo': 'Feminino', 'pais': 'Bolivia' },
{ 'id': 16, 'nome': 'Ming Liu Siang', 'fone': '(501) 3984600', 'email': 'cbarrickf@t-online.de', 'sexo': 'Feminino', 'pais': 'China' },
{ 'id': 17, 'nome': 'Inglis Treweela', 'fone': '(718) 4157883', 'email': 'itreweelag@tripod.com', 'sexo': 'Masculino', 'pais': 'Finlandia' },
{ 'id': 18, 'nome': 'Manoel Soares', 'fone': '(213) 5730967', 'email': 'manusoares@yahoo.com', 'sexo': 'Masculino', 'pais': 'Portugal' },
{ 'id': 19, 'nome': 'Hestia Palffrey', 'fone': '(349) 6453938', 'email': 'hpalffreyi@nba.com', 'sexo': 'Feminino', 'pais': 'Madagascar' },
{ 'id': 20, 'nome': 'Papoulous Mordon', 'fone': '(474) 3068249', 'email': 'gmordonj@uiuc.edu', 'sexo': 'Feminino', 'pais': 'Grécia' }
];
}
}
|
Vamos definir a interface com o usuário no arquivo app.component.html com o código abaixo:
<div class="container">
<h2 class="text-secondary text-center">{{ title }}!</h2>
<hr />
<div>
<h4 class="text-info">Alunos</h4>
<div> </div>
<table class="table table-bordered">
<thead>
<tr>
<th>Id</th>
<th>Nome</th>
<th>Telefone.</th>
<th>Email</th>
<th>Sexo</th>
<th>País</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let a of dadosAlunos | paginate: { itemsPerPage: contador, currentPage: pag }">
<td>{{a.id}}</td>
<td>{{a.nome}}</td>
<td>{{a.fone}}</td>
<td>{{a.email}}</td>
<td>{{a.sexo}}</td>
<td>{{a.pais}}</td>
</tr>
</tbody>
</table>
</div>
<!--inclindo o controle de paginação.-->
<div class="text-right">
<pagination-controls (pageChange)="p = $event"></pagination-controls>
</div>
</div>
|
Para dar uma aparência visual mais elegante à nossa interface vamos incluir uma referência CDN ao Bootstrap no arquivo Index.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Paginacao1</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
</head>
<body>
<app-root>Carregando...</app-root>
<script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</body>
</html>
|
Agora no arquivo app.component.css inclua a definição do estilo:
th, td {
text-align: left;
}
|
Agora é só alegria...
Na pasta do projeto , no prompt de comandos digite : ng serve -o
A seguir veremos no navegador o seguinte resultado:
Podemos usar as Labels - Previous e Next - em português definindo os valores para previousLabel e nextLabel conforme mostra o código a seguir:
Pegue o projeto angular aqui : paginacao1.zip
"Dando graças ao Pai
que nos fez idôneos para participar da herança dos santos na luz;
O qual nos tirou da potestade das trevas, e nos transportou para o reino do
Filho do seu amor;
Em quem temos a redenção pelo seu sangue, a saber, a remissão dos pecados;
O qual é imagem do Deus invisível, o primogênito de toda a criação;"
Colossenses 1:12-15
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
NET - AngularJS : Apresentação (início do curso) - Macoratti
ASP .NET Core e Angular 2 - Criando uma aplicação Básica - Macoratti