2016-06-17 6 views
4

läuft Ich versuche, Objekteigenschaften Schlüssel in angular2 zu machen mit folgendem Code verwendet:* ngFor eine Endlosschleife in angular2

<ul> 
    <li *ngFor="let element of componentModel | keys;let i=index"> 
     {{element.key}}--{{element.value}} // 1---Bhushan...loaded only once 
     <span *ngIf="element">{{ loadProperty(i,element) }}</span> 
    </li> 
</ul> 

Aber ich bin hier ein Problem gegenüber. Die Ausgabe im Browser wird nur einmal geladen. , aber der Methodenaufruf, d. H. loadProperty(i,element) läuft in einer Endlosschleife.

loadProperty(i:number,element:any){  
    console.log(element.key+'========'+element.value); 
    console.log(element);  
} 

Mittel an Browser

(1 --- Bhushan)

wird nur einmal angezeigte Ausgabe aber auf der Konsole seine unendlich wie unten ausgeführt wird:

Snapshot of the console

Ich möchte diese Methode nur einmal aufrufen pro Iteration.

irgendwelche Eingänge?

Antwort

9

Dies ist nur Angular2 Change Detection bei der Arbeit loadProperty(i,element) immer wieder in jedem Change Detection-Zyklus aufrufen.

Der Aufruf von Methoden aus der Vorlage wird abgeraten, da sie sehr oft aufgerufen werden. Sie sollten stattdessen das Ergebnis in einer Eigenschaft speichern und stattdessen an diese Eigenschaft binden.

+0

Ich bin mir nicht sicher, wie man das mit Property Binding macht, haben Sie irgendwelche PLNKR dafür, wo die Methode nur einmal pro Iteration aufgerufen wird? @Gunter –

+0

Was versuchst du zu erreichen? Klingt wie http://stackoverflow.com/questions/36427670/angular2-calling-custom-function-after-ngswitch-new-view-is-created/36427769#36427769 –

+0

ziemlich genau dasselbe, aber ich möchte auch das iterierte Element übergeben zu der Methode. Eigentlich sind diese Elemente Objekte, und ich biete einen Editor für jedes Element an, um seinen Wert zu ändern. dh. Wenn es sich um ein Objekt handelt, das aus Arrays besteht, wird objectEditorComponent geladen und darin wird arrayEditorComponent für jedes Array geladen. Daher benutze ich * ngFor, um iteriertes Element zu iterieren und zu übergeben, um den richtigen Editor basierend auf seinem Datentyp auszuwählen. es ist ein rekursiver Prozess, bis es das letzte Element bekommt. –

Verwandte Themen