我正在使用Lodash按列对数据进行排序。当我单击表列标题中的箭头时,该特定表列将按升序或降序排序。但是,我希望每列都按升序排序,而不管其他列的当前顺序如何。现在,我的函数只根据当前方向切换上升和下降,而不管列。我该如何修复这个功能?
export class TableComponent {
@Input() data
direction: string = ''
sort(val) {
if (this.direction === '' || this.direction === 'asc') {
this.data = _.orderBy(this.data, [val], ['desc'])
this.direction = 'desc'
} else {
this.data = _.orderBy(this.data, [val], ['asc'])
this.direction = 'asc'
}
console.log(this.direction)
}
}
table.component.ts
<table>
<thead>
<tr>
<th *ngFor="let col of cols">
{{col.header}}
<input type="text"
[(ngModel)]=fields[col.value]
(ngModelChange)="handleFilterChange()"
(click)="selectCol(col.value)"
*ngIf=col.enableFilter/>
<img
class="arrow"
(click)="sort(col.value)"/>
</th>
</tr>
</thead>
<tbody *ngFor="let row of data | filter: filters:selectedCol">
<tr>
<td *ngFor="let col of cols">{{row[col.value]}}</td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
问题: 假设您必须呈现客户详细信息列表,包括客户名称,加入日期,地址,电话等。并且加入日期在JSON响应中以字符串形式出现。
由于无法将“加入日期”(joinDate)列作为日期进行排序,并且假定还有另一个隐藏列以毫秒为单位给出此“加入日期”(joinDateInMs)。
解决方案:对此列使用“ cellRenderer”和“ comparator”组合。 下面的代码段不言自明。
columnDefs: [{
headerName: “Join Date”, field: “joinDateInMs”,
cellRenderer: function (params) {
return params.data.joinDate;
},
comparator: self.createDateComparator
},
]
......
//
createDateComparator(date1, date2) {
return date2 - date1;
}