角度4和primeng数据网格的性能问题

时间:2018-01-03 09:20:07

标签: angular typescript primeng

我正在使用primeng数据网格用于角度4,在网格中我有18列,现在有最多50行可以一次看到分页。我的要求是每页显示100行和150行,但是超过50行,网格会出现严重的性能问题,例如渲染大约需要30秒,并且需要10秒才能使用,数据从服务器加载,从服务器收到的数据非常快。有没有其他人遇到过问题。如果是的话,你怎么能修复它。

HTML

<p-dataTable #dt [value]="autoProcessGridData" [(selection)]="selectedRows" [(rows)]="rowsCountPerPage" [lazy]="true" (onLazyLoad)="loadData($event,false,'')"
    [(totalRecords)]="totalRecords" [paginator]="true" [pageLinks]="3" [rowsPerPageOptions]="[10, 25, 50]"
    [sortField]="fields.TIMEINPROCESSING.field" sortOrder="1" sortOrder="1" scrollable="true" [scrollHeight]="viewHeight">
          <p-column *ngFor="let col of cols; let i = index" [field]="col.field" [header]="col.header" [(hidden)]="col.hidden" [styleClass]="col.class" [style]="{'display' : (col.hidden?'none':'')}" selectionMode="{{col.header==fields.BULKACTIONS.header ? 'multiple': ''}}"
              [sortable]="col.sortable">
                  <ng-template *ngIf="col.header==fields.TIMEINPROCESSING.header" let-row="rowData" pTemplate="body">
                      <span [ngClass]="getClass(row[fields.TIMEINPROCCODE.field])">{{row[fields.TIMEINPROCESSING.field]}}</span>
                  </ng-template>
                  <ng-template *ngIf="col.header==fields.ACTIONS.header" let-row="rowData" pTemplate="body">
                      <span class="glyphicon glyphicon-arrow-right iconstyle {{isEnabled(row, 'sendtomanual')? 'sendtomanual' : 'disabled-icon'}}" (click)="openSingleRowTaskModel(row, 'SENDTOMANUAL')" title="Send To Manual"></span>
                      <span class="fa fa-refresh iconstyle {{isEnabled(row, 'requeue')? 'requeue' : 'disabled-icon'}}" (click)="openSingleRowTaskModel(row,'REQUEUE')" title="Requeue File"></span>
                      <span class="fa fa-close iconstyle {{isEnabled(row, 'reject')? 'reject' : 'disabled-icon'}}" (click)="openSingleRowTaskModel(row,'REJECT')" title="Reject File"></span>
                  </ng-template>
                  <ng-template *ngIf="col.field==fields.INDEX.field" let-row="rowData" pTemplate="body">
                      <span title="{{row[fields.INDEX.field]}}">{{row[fields.INDEX.field]}}</span>
                  </ng-template>
                  <ng-template *ngIf="col.header==fields.BULKACTIONS.header" pTemplate="header">
                      <span [popover]="myPopoverAuto" popoverPlacement="auto bottom" class="fa fa-cog cog-icon pull-right" title="View Bulk Action"></span>
                      <span style="width:80%">{{col.header}}</span>
                          <popover-content #myPopoverAuto placement="right" [closeOnClickOutside]="true">
                          <h3>Bulk Action</h3>
                          <p>
                                                            {{selectedRows.length ? selectedRows.length : 0}} items selected
                          </p>
                          <ul>
                              <li>
                                 <span (click)="myPopoverAuto.hide(); openBulkTaskModel('SENDTOMANUAL')"><em class="glyphicon glyphicon-arrow-right iconstyle sendtomanual"></em> Send To Manual</span>
                              </li>
                              <li>
                                  <span (click)="myPopoverAuto.hide(); openBulkTaskModel('REQUEUE')"><em class="fa fa-refresh iconstyle requeue"></em> Requeue Files</span>
                              </li>
                              <li>
                                  <span (click)="myPopoverAuto.hide(); openBulkTaskModel('REJECT')"><em class="fa fa-close iconstyle reject"></em> Reject to Client</span>
                              </li>
                          </ul>
                      </popover-content>
                  </ng-template>
                  <ng-template *ngIf="col.header==fields.DATACENTER.header" pTemplate="header" let-col>
                      <span>{{col.header}}</span>
                          <p-dropdown [(ngModel)]="defaultDataCenter" [options]="dataCentreDd" [style]="{'width':'100%'}" (onChange)="filterByField($event, col.field, fieldType.DD);"
                                                    styleClass="ui-column-filter"></p-dropdown>
                  </ng-template>
                  <ng-template *ngIf="col.filter==true" pTemplate="header">
                                            <span>{{col.header}}
                       <span *ngIf="isDisabled(i) && col.dualFilter==true" title="Clear Filter" class="clearFunnel fa fa-close" (click)="enableTextFilter(i, col.field)"></span>
                                                    <em *ngIf="col.dualFilter==true" class="fa fa-filter" aria-hidden="true" (click)="getFilterOnClick($event,col.field,i)"></em>
                      <p-multiSelectFilter *ngIf="col.dualFilter==true" 
                                                    [options]="funnelFilterOptions" 
                                                    [value]=customfilterValues[col.field] 
                                                    (onApply)="applyFunnelFilter($event)"
                                                    (onSelfClick)="onSelfClickFunnel($event)" 
                                                    [field]="col.field"
                                                    [filterTitle]="col.header">
                  </p-multiSelectFilter>
                  </span>
                  <input [(ngModel)]="filters[i]" type="text" size="30" pInputText (keyup)="filterByField($event, col.field, fieldType.TEXT, i)"
                                            (focus)="old[i]=filters[i]; doManualScroll(col.field)"  (blur)="changeEvent(old[i], filters[i], col.field)"
                                                    class="{{'input-'+col.field}}" [attr.disabled]="isDisabled(i) ? true : null" />
              </ng-template>
              <ng-template *ngIf="col.header==fields.PROCESSEDBYFIRSTNAME.header" let-row="rowData" pTemplate="body">
                  <span *ngIf="row[fields.PROCESSEDBYFIRSTNAME.field] != null">{{row[fields.PROCESSEDBYFIRSTNAME.field]}} {{row[fields.PROCESSEDBYLASTNAME.field]}}</span>
                  <span *ngIf="row[fields.PROCESSEDBYFIRSTNAME.field] == null">N/A</span>
             </ng-template>
             <ng-template *ngIf="col.header==fields.UPLOADEDBYFIRSTNAME.header" let-row="rowData" pTemplate="body">
                 <span *ngIf="row[fields.UPLOADEDBYFIRSTNAME.field] != null">{{row[fields.UPLOADEDBYFIRSTNAME.field]}} {{row[fields.UPLOADEDBYLASTNAME.field]}}</span>
                 <span *ngIf="row[fields.UPLOADEDBYFIRSTNAME.field] == null">N/A</span>
             </ng-template>
             <ng-template *ngIf="col.header==fields.LASTACTION.header" let-row="rowData" pTemplate="body">
                 <span *ngIf="row[fields.LASTACTION.field] != null">{{row[fields.LASTACTION.field]}}</span>
                 <span *ngIf="row[fields.LASTACTION.field] == null">N/A</span>
            </ng-template>
           <ng-template *ngIf="col.header==fields.LASTACTIONDATE.header" let-row="rowData" pTemplate="body">
              <span *ngIf="row[fields.LASTACTIONDATE.field] != null">{{localDate(row[fields.LASTACTIONDATE.field])}}</span>
                  <span *ngIf="row[fields.LASTACTIONDATE.field] == null">N/A</span>
           </ng-template>
           <ng-template *ngIf="col.header==fields.PROJECT.header" let-row="rowData" pTemplate="body">
               <span><a class="reject" (click)="openProjectModel(row)">{{row[fields.PROJECT.field]}} </a> </span>
           </ng-template>
       </p-column>
  </p-dataTable>

0 个答案:

没有答案