Ich habe ein DTO-Objekt, das einen Date-Parameter hat. Ich wickle dieses Dto in ein Ansichtsmodellobjekt ein, dessen Eigenschaften ich dann aus meiner Sicht an ein Etikett binde.Warum geht angularjs Digest in Endlosschleife mit Datum Getter-Funktion
<label class="form-control">{{controller.ViewModel.Date}}</label>
Im View-Modell habe ich also einen Getter. (Ich bin mit Typoskript)
public get Date(): Date {
return new Date(Date.parse(this.dto.Date));
//return moment(this.dto.Date).toDate();
}
das emittierte JavaScript:
Object.defineProperty(ViewModel.prototype, "Date", {
get: function() {
return new Date(Date.parse(this.dto.Date));
},
enumerable: true,
configurable: true
});
Ich glaube, dass der Grund, weil ich ein neues Date in dem Getter erschaffe und Winkel denkt, dass dies bedeutet, die Daten sind immer neu und es erhält das Datum, bis sich das Modell stabilisiert und somit eine Endlosschleife verursacht.
Warum funktioniert das eckig?
Warum ruft es den Getter immer wieder an, was ist falsch daran, es nur einmal anzurufen?
Kann ich Angular angeben, um den Getter nur einmal aufzurufen und den angegebenen Wert zu akzeptieren?
Welche Version von eckigen verwenden Sie? – SpykeBytes
eckig wird aufeinanderfolgende Verdaus laufen, bis sich das Ergebnis aller Beobachter stabilisiert. Hier wird jedes Mal, wenn Ihr Beobachter ein anderes Objekt zurückgibt, die Endlosschleife erzeugt. Manchmal können Sie dies umgehen, indem Sie toString() für das Ergebnis verwenden, wenn Sie von einer Vorlage aufgerufen werden. Beispiel: '{{controller.ViewModel.Date.toString()}}' – BiAiB
Warum speichern Sie das Ergebnis der Funktion nicht in einer $ scope-Variablen und verwenden Sie diese dann im HTML, anstatt direkt mit der Funktion –