
Use material angular para criar tabelas estatísticas.
Instale o Angular Material, a ferramenta de desenvolvimento de componentes (CDK) e a biblioteca de animação Angular e execute o esquema de código
para adicionar o esquema de tabela @angular/material
para criar um componente que pode renderizar um material angular predefinido e classificável para. fontes de dados pagináveis. [Recomendação do tutorial relacionado: "tutorial angular"]
gere @angular/material:table texe1
e modifique-o com base nisso.
O arquivo html do componente
<div class="mat-elevation-z8">
<tabela mat-table class="full-width-table" matSort aria-label="Elementos">
<!-- Coluna de ID -->
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header>número de série</th>
<td mat-cell *matCellDef="let row">{{row.id}}</td>
</ng-container>
<!-- Coluna Nome -->
<ng-container matColumnDef="nome">
<th mat-header-cell *matHeaderCellDef mat-sort-header> nome da rocha e do solo</th>
<td mat-cell *matCellDef="let row">{{row.name}}</td>
</ng-container>
<!-- Coluna num1 -->
<ng-container matColumnDef="num1">
<th mat-header-cell *matHeaderCellDef mat-sort-header> quantidade esperada</th>
<td mat-cell *matCellDef="let row">{{row.num1}}</td>
</ng-container>
<!-- Coluna num2 -->
<ng-container matColumnDef="num2">
<th mat-header-cell *matHeaderCellDef mat-sort-header> número atual</th>
<td mat-cell *matCellDef="let row">{{row.num2}}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; colunas: displayColumns;"></tr>
</tabela>
<!-- Controlar o comprimento de exibição dos dados da tabela-->
<mat-paginador #paginador
[comprimento]="fonte de dados?.dados?.comprimento"
[pageIndex]="0"
[tamanho da página]="10"
[pageSizeOptions]="[5, 10, 17]"
aria-label="Selecionar página">
</mat-paginator>
</div> O arquivo texe1-datasource.ts do componente
importa { DataSource } de '@angular/cdk/collections';
importar { MatPaginator } de '@angular/material/paginator';
importar { MatSort } de '@angular/material/sort';
importar {mapa} de 'rxjs/operadores';
importar {Observável, de como observableOf, mesclar} de 'rxjs';
// TODO: Substitua isto pelo seu próprio tipo de modelo de dados
interface de exportação Texe1Item {
nome: sequência;
identificação: número;
num1: número;
num2: número;
}
// TODO: substitua isso por dados reais da sua aplicação
const EXAMPLE_DATA: Texe1Item[] = [
{id: 1, nome: 'argila siltosa', num1:1000, num2:100,},
{id: 2, nome: 'argila siltosa', num1:1000, num2:100,},
{id: 3, nome: 'Clay', num1:1000, num2:100,},
{id: 4, nome: 'Lodo argiloso', num1:1000, num2:100,},
{id: 5, nome: 'argila siltosa', num1:1000, num2:100,},
{id: 6, nome: 'Brécia (brecha)', num1:1000, num2:100,},
{id: 7, nome: '中沙', num1:1000, num2:1000,},
{id: 8, nome: 'Solo orgânico', num1:1000, num2:100,},
{id: 9, nome: 'Solo de turfa A', num1:1000, num2:100,},
{id: 10, nome: 'Solo de turfa B', num1:1000, num2:100,},
{id: 11, nome: 'Silte arenoso', num1:1000, num2:100,},
{id: 12, nome: 'areia de silte', num1:1000, num2:100,},
{id: 13, nome: 'areia fina', num1:1000, num2:100,},
{id: 14, nome: 'areia grossa', num1:1000, num2:100,},
{id: 15, nome: 'Gravel', num1:1000, num2:100,},
{id: 16, nome: 'Seixo (cascalho)', num1:1000, num2:100,},
{id: 17, nome: 'Pedregulho (pedregulho)', num1:1000, num2:100,},
];
/**
* Fonte de dados para a visualização Texe1 Esta classe deve.
* encapsular toda a lógica para buscar e manipular os dados exibidos
* (incluindo classificação, paginação e filtragem).
*/
classe de exportação Texe1DataSource estende DataSource<Texe1Item> {
dados: Texe1Item[] = EXAMPLE_DATA;
paginador: MatPaginator | indefinido;
ordenar: MatSort | indefinido;
construtor() {
super();
}
/**
* Conecte esta fonte de dados à tabela A tabela só será atualizada quando.
* o fluxo retornado emite novos itens.
* @returns Um fluxo dos itens a serem renderizados.
*/
conectar(): Observable<Texe1Item[]> {
if (este.paginador && este.sort) {
// Combine tudo que afeta os dados renderizados em uma atualização
// stream para a tabela de dados consumir.
retornar mesclagem (observávelOf (this.data), this.paginator.page, this.sort.sortChange)
.pipe(mapa(() => {
retornar this.getPagedData(this.getSortedData([...this.data ]));
}));
} outro {
throw Error('Por favor, defina o paginador e classifique a fonte de dados antes de conectar.');
}
}
/**
* Chamado quando a tabela está sendo destruída Use esta função para limpar.
* quaisquer conexões abertas ou liberar quaisquer recursos retidos que foram configurados durante a conexão.
*/
desconectar(): void {}
/**
* Paginar os dados (lado do cliente). Se você estiver usando paginação do lado do servidor,
* isso seria substituído pela solicitação dos dados apropriados ao servidor.
*/
private getPagedData(dados: Texe1Item[]): Texe1Item[] {
if (este.paginador) {
const startIndex = this.paginator.pageIndex * this.paginator.pageSize;
retornar dados.splice(startIndex, this.paginator.pageSize);
} outro {
retornar dados;
}
}
/**
* Classifique os dados (do lado do cliente). Se você estiver usando a classificação do lado do servidor,
* isso seria substituído pela solicitação dos dados apropriados ao servidor.
*/
private getSortedData(dados: Texe1Item[]): Texe1Item[] {
if (!this.sort || !this.sort.active || this.sort.direction === '') {
retornar dados;
}
retornar dados.sort((a, b) => {
const isAsc = this.sort?.direction === 'asc';
switch (this.sort?.ativo) {
case 'nome': return compare(a.name, b.name, isAsc);
caso 'id': retornar comparar(+a.id, +b.id, isAsc);
padrão: retorno 0;
}
});
}
}
/** Comparador de classificação simples, por exemplo, colunas de ID/Nome (para classificação do lado do cliente */).
função comparar (a: string | número, b: string | número, isAsc: booleano): número {
retornar (a < b ? -1 : 1) * (isAsc ? 1 : -1);
} O arquivo texe1.component.ts do componente
import { AfterViewInit, Component, ViewChild } from '@angular/core';
importar { MatPaginator } de '@angular/material/paginator';
importar { MatSort } de '@angular/material/sort';
importar { MatTable } de '@angular/material/table';
importar { Texe1DataSource, Texe1Item } de './texe1-datasource';
@Componente({
seletor: 'app-texe1',
templateUrl: './texe1.component.html',
styleUrls: ['./texe1.component.css']
})
classe de exportação Texe1Component implementa AfterViewInit {
@ViewChild(MatPaginator) paginador!: MatPaginator;
@ViewChild(MatSort) classificação!: MatSort;
Tabela @ViewChild(MatTable)!: MatTable<Texe1Item>;
fonte de dados: Texe1DataSource;
/** As colunas exibidas na tabela podem ser adicionadas, removidas ou reordenadas */.
colunas exibidas = ['id', 'nome','num1','num2'];
construtor() {
this.dataSource = new Texe1DataSource();
}
ngAfterViewInit(): void {
this.dataSource.sort = this.sort;
this.dataSource.paginator = this.paginator;
esta.tabela.dataSource = esta.dataSource;
}
} Finalmente, ele é exibido no arquivo app.component.html.
<app-texe1></app-texe1>
Renderização: 