angular表格排序分页

news/2025/2/25 7:33:38

说明:
使用angular实现表格,包括数据源,排序,分页
效果图:
在这里插入图片描述

step1:C:\Users\Administrator\WebstormProjects\untitled4\src\app\setting\setting.component.ts

javascript">import { Component, ViewChild, AfterViewInit } from '@angular/core';
import { MatTableModule, MatTableDataSource } from '@angular/material/table';
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
import { MatSort, MatSortModule } from '@angular/material/sort';
import { CommonModule } from '@angular/common';
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from '@angular/material/form-field';
import {MatIcon} from '@angular/material/icon';

export interface UserData {
  id: string;
  name: string;
  email: string;
  role: 'Admin' | 'User' | 'Guest';
}

@Component({
  selector: 'app-setting',
  standalone: true,
  imports: [
    CommonModule,
    MatTableModule,
    MatPaginatorModule,
    MatSortModule,
    MatInputModule,
    MatFormFieldModule,
    MatIcon
  ],
  templateUrl: './setting.component.html',
  styleUrls: ['./setting.component.css']
})
export class SettingComponent implements AfterViewInit {
  displayedColumns: string[] = ['id', 'name', 'email', 'role'];
  dataSource: MatTableDataSource<UserData>;

  @ViewChild(MatPaginator) paginator!: MatPaginator;
  @ViewChild(MatSort) sort!: MatSort;

  constructor() {
    // 生成测试数据
    const users = Array.from({ length: 100 }, (_, i) => ({
      id: (i + 1).toString(),
      name: `User_${i + 1}`,
      email: `user${i + 1}@demo.com`,
      role: this.getRole(i)
    }));
    this.dataSource = new MatTableDataSource<UserData>(users);
  }

  private getRole(index: number): 'Admin' | 'User' | 'Guest' {
    if (index % 3 === 0) return 'Admin';
    if (index % 2 === 0) return 'User';
    return 'Guest';
  }

  ngAfterViewInit() {
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
  }

  applyFilter(event: Event) {
    const filterValue = (event.target as HTMLInputElement).value;
    this.dataSource.filter = filterValue.trim().toLowerCase();

    if (this.dataSource.paginator) {
      this.dataSource.paginator.firstPage();
    }
  }
}

step2: C:\Users\Administrator\WebstormProjects\untitled4\src\app\setting\setting.component.html

<div class="container">
  <!-- 搜索框 -->
  <mat-form-field appearance="outline">
    <mat-label>Filter users</mat-label>
    <input
      matInput
      (keyup)="applyFilter($event)"
      placeholder="Search..."
      data-testid="search-input"
    >
    <mat-icon matSuffix>search</mat-icon>
  </mat-form-field>

  <!-- 数据表格 -->
  <table
    mat-table
    [dataSource]="dataSource"
    matSort
    class="mat-elevation-z8"
  >
    <!-- ID列 -->
    <ng-container matColumnDef="id">
      <th mat-header-cell *matHeaderCellDef mat-sort-header>ID</th>
      <td mat-cell *matCellDef="let user">{{ user.id }}</td>
    </ng-container>

    <!-- 姓名列 -->
    <ng-container matColumnDef="name">
      <th mat-header-cell *matHeaderCellDef mat-sort-header>Name</th>
      <td mat-cell *matCellDef="let user">{{ user.name }}</td>
    </ng-container>

    <!-- 邮箱列 -->
    <ng-container matColumnDef="email">
      <th mat-header-cell *matHeaderCellDef mat-sort-header>Email</th>
      <td mat-cell *matCellDef="let user">{{ user.email }}</td>
    </ng-container>

    <!-- 角色列 -->
    <ng-container matColumnDef="role">
      <th mat-header-cell *matHeaderCellDef mat-sort-header>Role</th>
      <td mat-cell *matCellDef="let user">
        <span [class]="'role-badge ' + user.role.toLowerCase()">
          {{ user.role }}
        </span>
      </td>
    </ng-container>

    <!-- 表头行 -->
    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
    <!-- 数据行 -->
    <tr
      mat-row
      *matRowDef="let row; columns: displayedColumns"
      class="row-hover"
    ></tr>
  </table>

  <!-- 分页器 -->
  <mat-paginator
    [pageSizeOptions]="[5, 10, 20]"
    showFirstLastButtons
    aria-label="Select page of users"
  ></mat-paginator>
</div>

step3: C:\Users\Administrator\WebstormProjects\untitled4\src\app\setting\setting.component.css

.container {
  padding: 20px;
  max-width: 1200px;
  margin: 0 auto;
}

mat-form-field {
  width: 100%;
  max-width: 400px;
  margin-bottom: 20px;
}

table {
  width: 100%;
  margin: 20px 0;
}

.role-badge {
  padding: 4px 8px;
  border-radius: 12px;
  font-size: 0.8em;
  font-weight: 500;
}

.role-badge.admin {
  background-color: #f0f8ff;
  color: #1e90ff;
}

.role-badge.user {
  background-color: #f0fff0;
  color: #228b22;
}

.role-badge.guest {
  background-color: #fff8dc;
  color: #daa520;
}

.row-hover:hover {
  background-color: #f5f5f5;
  cursor: pointer;
}

.mat-elevation-z8 {
  box-shadow: 0 5px 5px -3px rgba(0,0,0,.2),
  0 8px 10px 1px rgba(0,0,0,.14),
  0 3px 14px 2px rgba(0,0,0,.12);
}

end


http://www.niftyadmin.cn/n/5865178.html

相关文章

一文讲解Redis中的数据一致性问题

一文讲解Redis中的数据一致性问题 在技术派实战项目中&#xff0c;我们采用的是先写 MySQL&#xff0c;再删除 Redis 的方式来保证缓存和数据库的数据一致性。 我举例说明一下。 对于第一次查询&#xff0c;请求 B 查询到的缓存数据是 10&#xff0c;但 MySQL 被请求 A 更新为…

WebXR教学 03 项目1 旋转彩色方块

一、项目结构 webgl-cube/ ├── index.html ├── main.js ├── package.json └── vite.config.js二、详细实现步骤 初始化项目 npm init -y npm install three vite --save-devindex.html <!DOCTYPE html> <html lang"en"> <head><…

Debain12.9安装大模型微调基础环境

Debain12.9安装大模型微调基础环境 硬件信息安装基础组件安装CUDA安装NVCC 硬件信息 操作系统&#xff1a;Debain 12.9/Ubuntu 24.04 CPU&#xff1a;i7-10750H 内存&#xff1a;32G 显卡&#xff1a;GTX 1650&#xff08;4G&#xff09; 硬盘&#xff1a;SSD&#xff08;1T&a…

基于同轴聚类点云去重的铆钉高度测量

基于同轴聚类点云去重的铆钉高度测量 一、引言二、解决方案三、实验效果四、实验部分代码 一、引言 本实验起源于工业检测领域一个普遍存在的需求——精确测量铆钉相对于料盘&#xff08;即基准平面&#xff09;的高度。 需求&#xff1a;如何准确测定铆钉至料盘表面的高度&am…

C++对象模型之C++额外成本

1.介绍 C与C最大的区别&#xff0c;无疑在于面向对象&#xff0c;面向对象编程给C带来了强大的特性和灵活性。但同时也带来了一定的运行时和编译时的开销。下面介绍C对象模型的额外成本及其来源。 2.C的额外成本 &#xff08;1&#xff09;虚函数和动态多态的成本 虚函数表&am…

硬件加速与技术创新双轮驱动:DeepSeek和ChatGPT性能进阶的未来蓝图

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…

UE地编材质世界对齐纹理旋转

帖子地址 https://forums.unrealengine.com/t/how-to-rotate-a-world-aligned-texture/32532/4世界对齐纹理本身不能改 自己创建了个函数 把世界对齐纹理的内容赋值粘贴 在纹理偏移里给值 不要局限0-1 给值给大一点

deepseek本地部署,ragflow,docker

先下载ollama 1.官网下载 deepseek-r1:14bhttps://ollama.com/library/deepseek-r1:14b 2.GitHub下载GitHub - ollama/ollama: Get up and running with Llama 3.3, DeepSeek-R1, Phi-4, Gemma 2, and other large language models. 两种方式 安装完后&#xff0c;cmd-&g…