【问题标题】:Angular Material - Custom Column filter and Default filter not working togetherAngular Material - 自定义列过滤器和默认过滤器不能一起工作
【发布时间】:2021-08-08 13:11:14
【问题描述】:

列过滤器工作得很好,但默认过滤器(输入字段搜索)根本不起作用。我尝试了几件事,但没有任何结果。 我希望我的输入字段具有搜索两个列的默认行为,即 allAssociates 和 dept 列以及各个列过滤器。 它也不会抛出任何错误。 自定义列过滤器参考来自所以我没有在这里包括: https://www.freakyjolly.com/angular-material-table-custom-filter-using-select-box/#Adding_Filters_on_Table

filterTable 方法没有按预期工作 我会很感激任何建议..

完整代码:https://stackblitz.com/edit/angular-material-b6qdyt?file=app%2Fapp.component.html

分享了下面的sn-p:

HTML

<div>
  <mat-form-field 
    *ngFor="let filter of filterSelectObj" 
    style="margin-left: 15px;">
    <mat-label> Filter {{filter.name}} </mat-label>
    <select 
      matNativeControl 
      name="{{filter.columnProp}}" 
      [(ngModel)]="filter.modelValue" 
      (change)="filterChange(filter,$event)">
      <option value=""> All </option>
      <option 
        [value]="item" 
        *ngFor="let item of filter.options">
        {{item}}
      </option>
    </select>
  </mat-form-field>
  <mat-icon>search</mat-icon>
  <input 
    type="text" 
    placeholder="All Associates/Dept" 
    #input 
    (keyUp)="filterTable($event.target.value)"> &nbsp;
  <button 
    mat-stroked-button
    color="warn" 
    (click)="resetFilters(input)">
    Reset
  </button>
</div>

TS 文件:

ngOnInit() {
  //fetch data from Service
  const deptData = this.deptService.getData();
  this.dataSource = new MatTableDataSource(deptData);
  this.dataSource.filterPredicate = this.createFilter();
  this.filterSelectObj.filter((o) => {
    o.options = this.getFilterObject(deptData, o.columnProp);
  });
}

filterTable(input: string) {
  this.dataSource.filterPredicate =
    (data: DepartmentData, f: string) => !f || (data.allAssociates || data.dept) == f;
  input = input.trim(); // Remove whitespace
  input = input.toLowerCase(); // MatTableDataSource defaults to lowercase matches
  this.dataSource.filter = input;
}

【问题讨论】:

  • 您使用的是哪个版本的 Angular 和 Angular Material?
  • 材料 - 11.2.12 和 Angular - 11.2.13
  • 您提供的 stackblitz 运行 Angular V4 和 Material v2 ????????‍♂️

标签: angular angular-material angular-filters angular-material-table


【解决方案1】:

好的。所以我在您的实施中发现了两个问题。

  1. 在要绑定到的实际事件名称为 (keyup) 时,在您绑定到 (keyUp) 的模板中。

  2. 您的谓词函数存在问题。应该是这样的:

    this.dataSource.filterPredicate = (data: DepartmentData, f: string) => !f || data.allAssociates.toLowerCase().includes(f) || data.dept.toLowerCase().includes(f.toLowerCase());

解决这两个问题应该可以开始为您工作。

这是一个 Working Sample StackBlitz 供您参考。

【讨论】:

  • 非常感谢,现在工作正常。如果您能提供帮助,请快速思考一下。重置方法不会将 UI 中的“选择”选项重置为“全部”。如果您能发现问题。跨度>
  • 完成 :) @SiddAjmera
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2015-05-02
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
相关资源
最近更新 更多