You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在含数据列的Angular Material表格中实现点击按钮筛选3个月以上的数据

实现Angular Material表格筛选距今超过3个月的数据

嘿,这就帮你搞定这个筛选需求!我假设你已经有了基础的Angular Material表格,并且数据里包含一个日期字段(比如用来记录创建时间的createdAt)。下面一步步来实现:

1. 组件里的基础准备

首先在你的组件类中,先定义好表格的数据源,同时备份一份原始数据(方便后续想恢复全部数据时用):

import { Component } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';

// 先定义你的数据接口,根据实际结构调整
interface YourDataItem {
  id: number;
  content: string;
  createdAt: Date; // 这里是存储日期的字段,你可以换成自己的字段名
}

@Component({
  selector: 'app-your-table-component',
  templateUrl: './your-table-component.component.html',
  styleUrls: ['./your-table-component.component.css']
})
export class YourTableComponent {
  // 表格要展示的列,根据你的需求调整
  displayedColumns: string[] = ['content', 'createdAt'];
  dataSource = new MatTableDataSource<YourDataItem>();
  // 备份原始数据,避免筛选后丢失原数据
  private originalData: YourDataItem[] = [];

  ngOnInit() {
    // 这里模拟从接口获取数据,实际项目中替换成你的API请求
    this.originalData = [
      { id: 1, content: '测试数据1', createdAt: new Date('2024-01-10') },
      { id: 2, content: '测试数据2', createdAt: new Date('2024-04-20') },
      { id: 3, content: '测试数据3', createdAt: new Date('2023-11-05') }
    ];
    // 初始化表格数据源
    this.dataSource.data = this.originalData;
  }
}

2. 编写筛选逻辑函数

接下来写一个函数,用来计算“距今3个月”的日期,然后筛选出符合条件的数据:

// 筛选超过3个月的数据
filterOlderThanThreeMonths() {
  // 计算当前日期往前推3个月的时间点
  const threeMonthsAgo = new Date();
  threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);

  // 从原始数据中筛选出日期早于3个月前的条目
  const filteredItems = this.originalData.filter(item => {
    // 注意:如果你的日期是字符串格式,要先转成Date对象再比较
    return new Date(item.createdAt) < threeMonthsAgo;
  });

  // 更新表格数据源
  this.dataSource.data = filteredItems;
}

// 可选:添加一个恢复全部数据的函数
resetTable() {
  this.dataSource.data = this.originalData;
}

3. 在模板中添加按钮和表格

最后在组件的HTML模板里,添加触发筛选的按钮,以及你的Angular Material表格:

<!-- 筛选按钮 -->
<button mat-raised-button color="primary" (click)="filterOlderThanThreeMonths()">
  筛选距今超过3个月的数据
</button>
<!-- 可选的恢复按钮,方便查看全部数据 -->
<button mat-raised-button color="accent" (click)="resetTable()" style="margin-left: 12px;">
  显示全部数据
</button>

<!-- Angular Material表格 -->
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8" style="margin-top: 20px;">
  <!-- 内容列 -->
  <ng-container matColumnDef="content">
    <th mat-header-cell *matHeaderCellDef> 内容 </th>
    <td mat-cell *matCellDef="let item"> {{item.content}} </td>
  </ng-container>

  <!-- 日期列 -->
  <ng-container matColumnDef="createdAt">
    <th mat-header-cell *matHeaderCellDef> 创建日期 </th>
    <td mat-cell *matCellDef="let item"> {{item.createdAt | date:'yyyy-MM-dd'}} </td>
  </ng-container>

  <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
  <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>

几个小提示

  • 如果你的日期字段是字符串类型(比如从API返回的是'2024-01-01'),一定要在筛选时转换成Date对象再做比较,不然会出错。
  • 如果数据是异步获取的,记得在API请求的回调或者subscribe里初始化originalData和dataSource,确保数据加载完成后再操作。
  • 日期计算这里是直接用当前日期减3个月,比如今天是2024-05-25,那3个月前就是2024-02-25,所有早于这个时间的数据都会被筛选出来。

内容的提问来源于stack exchange,提问作者ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 14:42:43