PrimeNg数据表自定义排序重复自身

时间:2017-06-25 15:45:41

标签: angular sorting primeng

我在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()不断被反复调用。

任何人都可以帮助我了解可能导致此问题的原因以及解决方法吗?

2 个答案:

答案 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
   }