0

Ich lade einige Daten über Rest-Endport, um es in einem Array zu sichern. In einer * ngFor-Anweisung durchlaufe ich gerade alle diese Daten. Also alles funktioniert.Angular 2 set boolean am Ende der Iteration mit * ngFor

Gibt es einen möglichen Weg in Angular zu z.B. setze einen booleschen Wert, wenn die Iteration des Arrays beendet ist (so dass ich eine weitere Funktion auslösen kann)?

- bearbeitet -

Auf der ngOnInit Lifecycle-Methode i die Daten am retreiving:

ngOnInit() { 
    this.restService.getSomeBooks(5000).subscribe(buch => { 
    this.buecher = buch; 
    this.fetched = true; 
    }) 
} 

Danach - in HTML - Ich bin iterieren diesen Daten:

<table> 
 
     <thead>some table-heads</thead> 
 
     <tbody> 
 
     <tr style="text-align: center" *ngFor="let buchforTable of buecher"> 
 
     <td>{{buchforTable.author}}</td> 
 
     <td>{{buchforTable.erscheinungsdatum}}</td> 
 
     <td>{{buchforTable.isbn.toString()}}</td> 
 
     <td>{{buchforTable.verlag}}</td> 
 
     <td>{{buchforTable.uuid}}</td> 
 
     </tr> 
 
     </tbody> 
 
    </table>

Die * ngFor-Iteration sollte immer eine boolesche Variable setzen.

+0

Was ist das eigentliche Problem, das Sie versuchen, damit zu lösen; Könnten Sie einen Kontext bereitstellen? – jonrsharpe

+0

Der Kontext ist, dass ich die Zeit zwischen dem Beginn der Iteration und dem Ende der Iteration messen möchte. Wenn ich also über ein Array von 5000 Elementen iteriere, möchte ich die aktuelle Zeit in einer Variablen im ersten Array-Index speichern und dann die aktuelle Zeit am allerletzten Array-Index sichern. So kann ich mit der Differenz dieser Zeitwerte die tatsächliche Zeit für den Iterationsprozess ermitteln. Ich hoffe, das ist verständlich. – Fzum

+0

Zeigen Sie den Code, ich bin mir sicher, dass es einen guten Weg gibt, es zu lösen. –

Antwort

0

Wie Alex Po bereits erwähnt, funktioniert TrackBy. Wie Sie im folgenden Ausschnitt sehen können, ist es mit trackBy möglich, Ereignisse basierend auf dem aktuellen Index der Iteration zu behandeln.

<tbody> 
 
    <tr style="text-align: center" *ngFor="let buchforTable of buecher; trackBy: trackByFn"> 
 
    <td>{{buchforTable.author}}</td> 
 
    <td>{{buchforTable.erscheinungsdatum}}</td> 
 
    <td>{{buchforTable.isbn.toString()}}</td> 
 
    <td>{{buchforTable.verlag}}</td> 
 
    <td>{{buchforTable.uuid}}</td> 
 
    </tr> 
 
</tbody>

Um die Zeit des Rendering-Prozesses aller zu messen Array-Objekte die trackBy-Funktion würde wie folgt aussehen (Array enthält 5000 Objekte hier -> Index 0-4999):

trackByFn(index){ 
    if(index == 0) 
     this.renderStart = performance.now(); 
    if(index == 4999) { 
     var renderStopp = performance.now(); 
     var timeToRender = renderStopp - this.renderStart; 
    } 
    }