I'm doing a project in Angular 2 and I'm getting an issue that makes my pages lose a lot of performance. So, I have a table and everytime I scroll (up or down) it keeps calling one of my functions. This is the one:
.component.ts
entriesToShow(): Array<any>{
let entries = [];
let i = 0;
if(Number(this.startingEntry)+Number(this.numOfEntries) <this.totalEntries)
this.lastShowingEntry = Number(this.startingEntry)+Number(this.numOfEntries);
else
this.lastShowingEntry = this.totalEntries;
if(this.dataTable != null && this.dataTable.aaData != null){
for(i = this.startingEntry; i< this.lastShowingEntry; i++){
entries.push(this.dataTable.aaData[i]);
}
this.lastShowingEntry = i;
return entries;
}else
return null;
}
And in my html I got something like this:
<div class="col-md-12" *ngIf="isDataTableAvailable">
<table id="table-EDIImports" class="table table-bordered display" cellspacing="0">
<thead>
<tr>
<th><strong>{{ 'POINT_OF_SALE' | translate }}</strong></th>
(more fields)
<th *ngIf="mode=='EDIT'"></th>
</tr>
<tr *ngFor="let obj of entriesToShow()" [ngSwitch]="obj.Status">
<th>{{ obj.PointOfSell }}</th>
<th *ngIf="obj.LineID == editRowId && selectedField == 'NIF' && mode=='EDIT'">
<input type="text" [(ngModel)]="valueToSave" value="{{ obj.NIF }}">
</th>
(more fields)
</tr>
</thead>
<tbody></tbody>
</table>
</div>
Any advice to make my page stop calling entriesToShow() everytime I scroll up/down?
Thank for the help.
EDIT: Removed some extra code
Don't call the entriesToShow() function from your template! It cause's the function to be called every change detection! Instead you should store the data in a variable in your component and the ngFor should iterate over him. .component.ts
.html