
Utilice material angular para crear tablas estadísticas.
Instale Angular Material, la herramienta de desarrollo de componentes (CDK) y la biblioteca de animación Angular, y ejecute el esquema de código
para agregar el esquema de tabla @angular/material
para crear un componente que pueda representar un material angular preestablecido y ordenable. fuentes de datos paginables. [Recomendación del tutorial relacionado: "tutorial angular"]
Genere @angular/material:table texe1
y luego modifíquelo en función de esto.
El archivo html del componente
<div class="mat-elevation-z8">
<tabla mat-table class="tabla-ancho-completo" matSort aria-label="Elementos">
<!-- Columna de identificación -->
<ng-contenedor matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header>número de serie</th>
<td mat-cell *matCellDef="let row">{{row.id}}</td>
</ng-contenedor>
<!-- Nombre de columna -->
<ng-contenedor matColumnDef="nombre">
<th mat-header-cell *matHeaderCellDef mat-sort-header> nombre de roca y suelo</th>
<td mat-cell *matCellDef="let row">{{row.name}}</td>
</ng-contenedor>
<!-- num1 Columna -->
<ng-contenedor matColumnDef="num1">
<th mat-header-cell *matHeaderCellDef mat-sort-header> cantidad esperada</th>
<td mat-cell *matCellDef="let row">{{row.num1}}</td>
</ng-contenedor>
<!-- num2 Columna -->
<ng-contenedor matColumnDef="num2">
<th mat-header-cell *matHeaderCellDef mat-sort-header> número actual</th>
<td mat-cell *matCellDef="let row">{{row.num2}}</td>
</ng-contenedor>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let fila; columnas: columnas mostradas;"></tr>
</tabla>
<!-- Controlar la longitud de visualización de los datos de la tabla-->
<mat-paginador #paginador
[longitud]="fuente de datos?.datos?.longitud"
[índice de página]="0"
[tamaño de página]="10"
[pageSizeOptions]="[5, 10, 17]"
aria-label="Seleccionar página">
</mat-paginador>
</div> El archivo texe1-datasource.ts del componente
import { DataSource } de '@angular/cdk/collections';
importar {MatPaginator} desde '@angular/material/paginator';
importar {MatSort} desde '@angular/material/sort';
importar {mapa} desde 'rxjs/operadores';
importar {Observable, de as observableOf, fusionar} desde 'rxjs';
// TODO: Reemplace esto con su propio tipo de modelo de datos
interfaz de exportación Texe1Item {
nombre: cadena;
identificación: número;
número1: número;
número2: número;
}
// TODO: reemplaza esto con datos reales de tu aplicación
const EXAMPLE_DATA: Texe1Item[] = [
{id: 1, nombre: 'arcilla limosa', num1:1000, num2:100,},
{id: 2, nombre: 'arcilla limosa limosa', num1:1000, num2:100,},
{id: 3, nombre: 'Arcilla', num1:1000, num2:100,},
{id: 4, nombre: 'Limo arcilloso', num1:1000, num2:100,},
{id: 5, nombre: 'arcilla limosa', num1:1000, num2:100,},
{id: 6, nombre: 'Brecha (brecha)', num1:1000, num2:100,},
{id: 7, nombre: '中沙', num1:1000, num2:1000,},
{id: 8, nombre: 'Suelo orgánico', num1:1000, num2:100,},
{id: 9, nombre: 'Suelo de turba A', num1:1000, num2:100,},
{id: 10, nombre: 'Suelo de turba B', num1:1000, num2:100,},
{id: 11, nombre: 'Limo arenoso', num1:1000, num2:100,},
{id: 12, nombre: 'arena limosa', num1:1000, num2:100,},
{id: 13, nombre: 'arena fina', num1:1000, num2:100,},
{id: 14, nombre: 'arena gruesa', num1:1000, num2:100,},
{id: 15, nombre: 'Grava', num1:1000, num2:100,},
{id: 16, nombre: 'Guijarro (grava)', num1:1000, num2:100,},
{id: 17, nombre: 'Roca (roca)', num1:1000, num2:100,},
];
/**
* Fuente de datos para la vista Texe1. Esta clase debería.
* encapsula toda la lógica para recuperar y manipular los datos mostrados
* (incluyendo clasificación, paginación y filtrado).
*/
clase de exportación Texe1DataSource extiende DataSource<Texe1Item> {
datos: Texe1Item[] = EXAMPLE_DATA;
paginador: MatPaginator | indefinido;
ordenar: MatSort | indefinido;
constructor() {
súper();
}
/**
* Conecte esta fuente de datos a la tabla. La tabla solo se actualizará cuando.
* la secuencia devuelta emite nuevos elementos.
* @returns Una secuencia de los elementos que se van a representar.
*/
conectar(): Observable<Texe1Item[]> {
if (este.paginador && este.ordenar) {
// Combina todo lo que afecta a los datos renderizados en una sola actualización
// flujo para que lo consuma la tabla de datos.
devolver fusión (observableOf (this.data), this.paginator.page, this.sort.sortChange)
.pipe(mapa(() => {
devolver this.getPaggedData(this.getSortedData([...this.data ]));
}));
} demás {
throw Error('Configure el paginador y ordene la fuente de datos antes de conectarse.');
}
}
/**
* Se llama cuando la tabla está siendo destruida. Utilice esta función para limpiar.
* cualquier conexión abierta o liberar cualquier recurso retenido que se haya configurado durante la conexión.
*/
desconectar(): nulo {}
/**
* Paginar los datos (del lado del cliente). Si está utilizando la paginación del lado del servidor,
* esto se sustituiría solicitando los datos adecuados al servidor.
*/
getPaggedData privado (datos: Texe1Item[]): Texe1Item[] {
si (este.paginador) {
const startIndex = this.paginator.pageIndex * this.paginator.pageSize;
devolver datos.splice(startIndex, this.paginator.pageSize);
} demás {
datos de devolución;
}
}
/**
* Ordenar los datos (del lado del cliente). Si está utilizando la clasificación del lado del servidor,
* esto se sustituiría solicitando los datos adecuados al servidor.
*/
getSortedData privado (datos: Texe1Item[]): Texe1Item[] {
if (!this.sort || !this.sort.active || this.sort.direction === '') {
datos de devolución;
}
devolver datos.sort((a, b) => {
const isAsc = this.sort?.direction === 'asc';
cambiar (este.tipo?.activo) {
caso 'nombre': retorno comparar (a.nombre, b.nombre, isAsc);
caso 'id': retorno comparar (+a.id, +b.id, isAsc);
predeterminado: devolver 0;
}
});
}
}
/** Comparador de clasificación simple, por ejemplo, columnas de ID/Nombre (para clasificación del lado del cliente */).
función comparar (a: cadena | número, b: cadena | número, isAsc: booleano): número {
retorno (a <b? -1: 1) * (isAsc? 1: -1);
} El archivo texe1.component.ts del componente
importa { AfterViewInit, Component, ViewChild } de '@angular/core';
importar {MatPaginator} desde '@angular/material/paginator';
importar {MatSort} desde '@angular/material/sort';
importar {MatTable} desde '@angular/material/table';
importar {Texe1DataSource, Texe1Item} desde './texe1-datasource';
@Componente({
selector: 'aplicación-texe1',
URL de plantilla: './texe1.component.html',
URL de estilo: ['./texe1.component.css']
})
la clase de exportación Texe1Component implementa AfterViewInit {
@ViewChild(MatPaginator) paginador!: MatPaginator;
@ViewChild(MatSort) ordenar!: MatSort;
@ViewChild(MatTable) tabla!: MatTable<Texe1Item>;
fuente de datos: Texe1DataSource;
/** Las columnas que se muestran en la tabla. Los ID de las columnas se pueden agregar, eliminar o reordenar */.
columnas mostradas = ['id', 'nombre', 'num1', 'num2'];
constructor() {
this.dataSource = nuevo Texe1DataSource();
}
ngAfterViewInit(): nulo {
this.dataSource.sort = this.sort;
this.dataSource.paginator = this.paginator;
this.table.dataSource = this.dataSource;
}
} Finalmente, se muestra en el archivo app.component.html.
<app-texe1></app-texe1>
Representación: 