PrimeNg数据表自定义排序重复进行

Abh*_*kur 6 sorting primeng angular

我在Angular 2应用中有一个数据表,我想在其中自定义对列的排序。

<p-column field="eligible" header="Eligible" sortable="custom" (sortFunction)="sortColumn($event)"></p-column>
Run Code Online (Sandbox Code Playgroud)

在我的组件文件中,我正在基于一些逻辑进行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);
}
Run Code Online (Sandbox Code Playgroud)

反过来,此API会取回整个数据并重新排序视图。现在,这里发生的事情是该方法sortColumn()不断被重复调用。

谁能帮助我了解造成此问题的原因以及如何解决?

ale*_*n96 5

您可以尝试事件ondataTable的排序

<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>
Run Code Online (Sandbox Code Playgroud)

此事件具有event.field:排序列的字段名称以及event.order(1 o -1)event.order。仅在单击“排序”列时才调用此事件。

希望对您有所帮助。

  • 我遇到了同样的问题,将表设置为“lazy”解决了它:https://github.com/primefaces/primeng/issues/5163 (2认同)

Jas*_*uma 5

我在 Prime ng 的 p 表中使用 onSort 和 sortFunction 时遇到重复的 http 调用问题。在 angular8 的 p-table 标签中使用 [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)">
Run Code Online (Sandbox Code Playgroud)

TS文件代码:

import { LazyLoadEvent } from 'primeng/api';

customSort(event: LazyLoadEvent) {   
    this.sortBy = event.sortField;
    this.sortOrderBy = event.sortOrder == 1 ? 'ASC' : 'DESC';
    //http call to server
   }
Run Code Online (Sandbox Code Playgroud)