angular - 使用反应式formarray进行角度材料表排序
问题描述
我正在尝试使用 formArray 作为输入数据源对角度材料表进行排序/过滤。
dataSource = new MatTableDataSource([]);
<table mat-table [dataSource]="formdataarray.controls" multiTemplateDataRows class="mat elevation-z8" matSort >
<ng-container matColumnDef="{{column}}" *ngFor="let column of columnsToDisplay" >
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{column}}</th>
<td mat-cell *matCellDef="let element"> {{ element.value[column] }} </td>
</ng-container>
但是排序/过滤不起作用
解决方案
您在这里有两个选择:
使用普通数组
formdataarray.controls
作为 adataSource
并实现所有 DataSource 方法,如过滤器,按您自己的排序。或者编写自定义 CDK DataSource 实现。另请参阅https://blog.angular-university.io/angular-material-data-table/使用
MatTableDataSource
和调整过滤和排序逻辑以支持AbstractControl
对象。
html
<table mat-table [dataSource]="dataSource"
ts
ngOnInit() {
// fill FormArray
...
this.dataSource.data = this.formdataarray.controls;
this.dataSource.sortingDataAccessor = (data: AbstractControl, sortHeaderId: string) => {
const value: any = data.value[sortHeaderId];
return typeof value === 'string' ? value.toLowerCase() : value;
};
const filterPredicate = this.dataSource.filterPredicate;
this.dataSource.filterPredicate = (data: AbstractControl, filter) => {
return filterPredicate.call(this.dataSource, data.value, filter);
}
}
此外,如果您想添加新项目,您FormArray
也应该更新this.dataSource.data
。另请参阅使用 FormArray 的 Angular Material 可编辑表
推荐阅读
- python - 在字符串中的每 4 个字符之间在字符串列表中插入一个空格的可能方法?
- wkhtmltopdf - 为什么 wkhtmltopdf 页眉和页脚仅应用于目录页 (toc)?
- node.js - 如何永远监控服务自动停止和重启
- java - 映射PostgreSQL枚举时如何在Hibernate中复制@Type和@Convert的逻辑?
- python - 将具有多维值的一维数组转换为多维数组
- python - Django MySQL 数据库位置和设置
- python - 提交按钮不起作用并重定向到 Django 中的 404 错误页面
- gemfire - 在 Gemfire 服务器日志中发现“线程已用尽”
- visual-studio - HTK 在 windows10 中安装 / 找不到 VC98
- react-native - 如何使用 join() 在数组中渲染反应原生组件?