我想在重新加载数据后保留表的排序设置。我尝试通过在调用代理后触发代码中的排序来做到这一点:
$crap = Get-Content C:\temp\input.csv | Select-Object -First 5
$OnlyVulns = Get-Content C:\temp\input.csv | Select-Object -Skip 5 | ConvertFrom-Csv | Where-Object Type -eq 'Vuln'
$CrapAndOnlyVulns = $crap + $OnlyVulns
$CrapAndOnlyVulns > C:\pathTo\NewFile.csv
我的html表是这样的
this.keptSort = 'name',
this.keptSortDirection = 'desc',
this.someProxy
.getTableContent(this.id)
.subscribe((res) => {
const rows = res.map((r) => new RowMode(r));
this.dataSource = new MatTableDataSource(rows);
this.selectRowsWithId(this.selection);
if (this.sort) {
this.sort.sort(<MatSortable>{
id: this.keptSort,
start: this.keptSortDirection});
}
});
但这会导致错误:
错误:ExpressionChangedAfterItHasBeenCheckedError:检查表达式后,表达式已更改。先前的值:“活动:未定义”。当前值:“ active:false”。似乎已在对其父级和子级进行脏检查后创建了该视图。
其他信息,我也有MatSort设置器:
<table
mat-table
matSort
[dataSource]="dataSource"
matSortActive="creationDate"
matSortDirection="desc" >
...</table>
和
@ViewChild(MatSort) set matSort(ms: MatSort) {
if (ms) {
this.sort = ms;
this.setDataSourceAttributes();
}
}
关于如何解决此问题的任何想法或方向指示?
答案 0 :(得分:1)
找到了解决方法! :D
对于那些感兴趣的人:
我从代理的订阅中删除了“ if(this.sort){...}”部分。
然后我更改了表格html,现在使用函数来定义排序:
<table
mat-table
matSort
[dataSource]="dataSource"
[matSortActive]="getActiveSort()"
[matSortDirection]="getSortDirection()" >
...</table>
这些函数将返回所需的排序设置。