我在Angular 2应用程序中有一个数据表,我想自定义一列。
<p-column field="eligible" header="Eligible" sortable="custom" (sortFunction)="sortColumn($event)"></p-column>
在我的组件文件中,我正在进行API调用,以根据某些逻辑从后端获取排序结果。
sortColumn(colName: any) {
let columnName = undefined !== colName.field ? colName.field : colName;
let sortObject: any = {};
if (this.sortedColumn === columnName) {
if (!this.sortAsc) {
this.sortAsc = true;
sortObject[columnName] = 'DESC';
} else {
this.sortAsc = false;
sortObject[columnName] = 'ASC';
}
} else {
this.sortedColumn = columnName;
this.sortAsc = false;
sortObject[columnName] = 'ASC';
}
this.getData(sortObject);
}
此API返回获取整个数据并重新排序视图。现在发生的事情是这个方法 sortColumn()不断被反复调用。
任何人都可以帮助我了解可能导致此问题的原因以及解决方法吗?
答案 0 :(得分:4)
您可以尝试onSort of datatable事件
<p-dataTable [value]="data" (onSort)="sortColumn($event)>
<p-column field="vin" header="Vin" ></p-column>
<p-column field="eligible" header="Eligible" [sortable]="true"></p-column>
<p-column field="year" header="Year"></p-column>
<p-column field="color" header="Color" ></p-column>
</p-dataTable>
此事件具有event.field:已排序列的字段名称和event.order(1 o -1)event.order。仅当单击排序列时才会调用此事件。
我希望它对你有所帮助。
答案 1 :(得分:0)
由于在Prime ng的p表中同时使用onSort和sortFunction,我遇到了重复的http调用问题。使用angular8的p表标记中的[lazy] =“ true”,(onLazyLoad)=“ customSort($ event)”解决了问题。
HTML:
<p-table [loading]="isLoading"
[value]="listProjectClone"
[scrollable]="true"
sortMode="single"
styleClass="custom-table borderless" [lazy]="true"
(onLazyLoad)="customSort($event)">
TS文件代码:
import { LazyLoadEvent } from 'primeng/api';
customSort(event: LazyLoadEvent) {
this.sortBy = event.sortField;
this.sortOrderBy = event.sortOrder == 1 ? 'ASC' : 'DESC';
//http call to server
}