angular – 过滤材料表中的不同列
发布时间:2020-12-17 17:37:16 所属栏目:安全 来源:网络整理
导读:我正在尝试向材质表添加不同的过滤器.更确切地说,我正在尝试重现类似于以下GIF的内容 为此,我在下面的Github thread中关注irowbin的回复,但我无法根据他的指导方针生成我想要的内容 在Stackblitz或Github上有任何工作示例,所以我可以在mattable中关注并创建
我正在尝试向材质表添加不同的过滤器.更确切地说,我正在尝试重现类似于以下GIF的内容
为此,我在下面的Github thread中关注irowbin的回复,但我无法根据他的指导方针生成我想要的内容 在Stackblitz或Github上有任何工作示例,所以我可以在mattable中关注并创建多个搜索过滤器吗? 解决方法
这是一个基于其他材料组件的角度材料表实现列过滤器的示例
单柱柱过滤器的结构 <ng-container matColumnDef="position"> <th mat-header-cell *matHeaderCellDef> <div class="header"> No. <button mat-button class="btn-toggle" [matMenuTriggerFor]="menu"> <mat-icon>keyboard_arrow_down</mat-icon> </button> </div> <mat-menu #menu> <div mat-menu-item mat-filter-item [disableRipple]="true" class="menu-title"> No. </div> <div mat-menu-item mat-filter-item [disableRipple]="true"> <mat-form-field> <mat-select [panelClass]="'mat-elevation-z10'" placeholder='Conditions' [(value)]="searchCondition.position"> <mat-option *ngFor="let condition of conditionsList" [value]="condition.value">{{condition.label}}</mat-option> </mat-select> </mat-form-field> </div> <div mat-menu-item mat-filter-item [disableRipple]="true"> <mat-form-field> <input matInput placeholder="Value" [(ngModel)]="searchValue.position"> </mat-form-field> </div> <div mat-menu-item mat-filter-item [disableRipple]="true"> <button mat-raised-button (click)="clearColumn('position')">Clear</button> <button mat-raised-button color="primary" (click)="applyFilter()">Search</button> </div> </mat-menu> </th> <td mat-cell *matCellDef="let element"> {{element.position}} </td> </ng-container> mat-filter-item指令用于防止在click事件上隐藏mat菜单 条件清单和功能 export const CONDITIONS_LIST = [ { value: "nono",label: "Nono" },{ value: "is-empty",label: "Is empty" },{ value: "is-not-empty",label: "Is not empty" },{ value: "is-equal",label: "Is equal" },{ value: "is-not-equal",label: "Is not equal" } ]; export const CONDITIONS_FUNCTIONS = { // search method base on conditions list value "is-empty": function (value,filterdValue) { return value === ""; },"is-not-empty": function (value,filterdValue) { return value !== ""; },"is-equal": function (value,filterdValue) { return value == filterdValue; },"is-not-equal": function (value,filterdValue) { return value != filterdValue; } }; 零件 public displayedColumns: string[] = ["position","name","weight","symbol"]; public dataSource = new MatTableDataSource(ELEMENT_DATA); public conditionsList = CONDITIONS_LIST; public searchValue: any = {}; public searchCondition: any = {}; private _filterMethods = CONDITIONS_FUNCTIONS; constructor() { } ngOnInit() { this.dataSource.filterPredicate = (p: PeriodicElement,filtre: any) => { let result = true; let keys = Object.keys(p); // keys of the object data for (const key of keys) { let searchCondition = filtre.conditions[key]; // get search filter method if (searchCondition && searchCondition !== 'none') { if (filtre.methods[searchCondition](p[key],filtre.values[key]) === false) { // invoke search filter result = false // if one of the filters method not succeed the row will be remove from the filter result break; } } } return result }; } applyFilter() { let searchFilter: any = { values: this.searchValue,conditions: this.searchCondition,methods: this._filterMethods } this.dataSource.filter = searchFilter; } clearColumn(columnKey: string): void { this.searchValue[columnKey] = null; this.searchCondition[columnKey] = 'none'; this.applyFilter(); } source/github pages preview (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |