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

Angular Material表格复选框过滤仅首次生效问题求助

问题:Angular Material表格复选框过滤仅首次生效

使用Angular Material表格时,通过复选框实现数据过滤,但该功能仅能首次生效。例如:存在2个不同的公司数据,首次勾选公司复选框时可过滤出对应2行数据,取消勾选可显示全部数据,但再次勾选时过滤失效。怀疑是状态管理或数据绑定问题,以下是尝试的applyFilter方法及两种手动过滤实现代码:

实现代码

applyFilter方法

applyFilter(): void {
console.log('mockData************', this.mockData);
if (!this.mockData || this.mockData.length === 0) {
  console.error('No Data to Filter');
  return;
}

let filteredData = this.mockData; // Start with the full data

if (this.identifierFilterValue && this.identifierFilterValue.length > 0) {
  filteredData = this.filterByIdentityCheckbox(filteredData);
}

console.log('Filtered Data ', filteredData);
if (this.dataSource) {
  this.dataSource.data = filteredData;
  this.dataSource.paginator = this.paginator; // Assign paginator here
}
if (this.dataSource && this.dataSource.paginator) {
  this.dataSource.paginator.firstPage();
 }
}

第一种filterByIdentityCheckbox实现(使用indexOf)

filterByIdentityCheckbox(data: any[]): any[] {
console.log(
  '******Applying filter by identifierFilterValue:',
  this.identifierFilterValue
);

if (
  !this.identifierFilterValue ||
  this.identifierFilterValue.length === 0
) {
  console.log('No Identifier Filters are selected return full data');
  return [...data];
}

return data.filter((item) => {
  console.log('Checking item identifier:', item.identifier);

  if (this.identifierFilterValue.indexOf(item.identifier) !== -1) {
    console.log('Matched identifier:', item.identifier);
    return true;
  } else {
    console.log('Identifier not matched', item.identifier);
    return false;
  }
});
}

第二种filterByIdentityCheckbox实现(使用includes)

filterByIdentityCheckbox(data: any[]): any[] {
console.log('******Applying filter by identifierFilterValue:', 
this.identifierFilterValue);

if (!this.identifierFilterValue || 
this.identifierFilterValue.length === 0) {
  console.log('No Identifier Filters are selected return full data');
  return [...data];
}

return data.filter(item => {
  console.log('Checking item identifier:', item.identifier);

  if (this.identifierFilterValue.includes(item.identifier)) {
    console.log('Matched identifier:', item.identifier);
    return true;
  } else {
    console.log('Identifier not matched', item.identifier);
    return false;
  }
});
 }

补充信息

项目包含父组件、筛选组件和表格组件,曾了解到可以用lodash解决ngOnChanges二次失效的相关内容,已提供StackBlitz示例,示例中包含核心组件的代码文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:38:22