2017-02-18 1 views
1

Wenn sich der Wert eines Ausdrucks ändert, wird dieser Fehler selten ausgegeben und die App reagiert nicht mehr.Angular - Der Ausdruck hat sich nach der Überprüfung geändert. Vorheriger Wert

Ich habe meiner Meinung nach diese Funktion: {{generalService.timeFromNow(item.creation_time)}}

die Anrufe: moment(timestamp, "X").fromNow()

Randomly, wenn die Zeit 35 bis 36 geändert, dieser Fehler passiert ist. image

Wenn ich eine andere Zeit habe (Minuten tickend), wird kein Fehler geworfen.

Diese Art von Fehler passiert rund um meine Anwendung, und ich möchte nicht die ngOnChanges Mikromanagement, wie ich denke, Angular sollte es verwalten.

+0

Wenn Sie enableprodmode in angular2 verwenden, verschwindet dieser Fehler. Andernfalls suchen Sie nach Elementen, die den Wert während des Änderungserfassungszyklus ändern. – laser

+0

@laser Aber was ist der Grund für diesen Fehler? Warum ist es ein Problem, während der Änderungserkennung zu ändern – Amit

+1

Ich habe ein Beispiel aus meiner Erfahrung: Ich hatte eine Direktive [focusme] = "true" für ein Element (und es stellte sich heraus, ein anderes). Wenn die Komponente geparst und ausgeführt wurde, wurden zwei Direktiven für zwei verschiedene Eingaben gerendert und der Fokus zuerst für eine, dann für eine andere Eingabe geändert und dies genau gemeldet, wobei der Wert während des Renderns geändert wurde (normalerweise nicht). Nach diesem Fehler habe ich meinen Fehler gefunden =) – laser

Antwort

1

Dies ist eine Funktion von Angular2 im Entwicklungsmodus, um die Erkennung von schlechten Designs zu unterstützen. Wenn dieser Fehler angezeigt wird, müssen Sie wahrscheinlich ein Redesign durchführen.

Angenommen, Sie haben zwei Felder mit dieser Bindung. wie ein Text und eine Grafik.

{{generalService.timeFromNow (item.creation_time)}}

sie können unterschiedliche Werte in Prod ab und zu, wenn Sie dieses Problem beheben nicht am Ende zeigt. Das wäre in Ihrem normalen Test wirklich schwer zu bemerken und nur ein kleiner Teil Ihrer Benutzer wird es bemerken.

Die Lösung besteht normalerweise darin, das Ergebnis von 'timeFromNow' in einer Statusvariablen zu speichern, so dass es sich während des Aktualisierungszyklus nicht ändern kann.

Verwandte Themen