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
相关产品推荐
相关产品推荐

