Ich laufe immer noch auf das gleiche Problem, Filter und Funktionen in ng-repeat wird die ganze verdammte Zeit genannt.
Beispiel hier, Ссылка , wenn Sie etwas in einer einzelnen Zeile ändern, wird someFilter
filter 1000 genannt mal.
Offenbar liegt das daran, dass jede Änderung an einem untergeordneten Bereich auf den übergeordneten Bereich überspringt, was dazu führt, dass $ digest ausgeführt wird, wodurch alle Filter ausgeführt werden ( Ссылка ). Ist das richtig? Wie kann ich verhindern, dass es in meinem speziellen Fall passiert?
Wie kann ich dafür sorgen, dass es nur auf dem geänderten Element ausgeführt wird?
In meinem eigentlichen Anwendungsfall wird der Filter aufgerufen, auch wenn die Änderung nicht einmal auf den Elementen von ng-repeat steht, es ist so sinnlos und es verursacht tatsächlich Leistungsprobleme.
// Bearbeiten löschte alle unnötigen Sachen vom Plünderer Ссылка
So funktioniert Angulars dreckige Überprüfung. Wenn Sie ein Array mit 500 Elementen haben und das Array geändert wird, muss der Filter erneut auf das gesamte Array angewendet werden. Und jetzt fragst du dich "Warum zweimal"?
Von noch eine Antwort :
Das ist normal, angularjs verwendet einen "dirty-check" -Ansatz, also muss er alle Filter aufrufen, um zu sehen, ob irgendwelche Änderungen existieren. Danach erkennt er, dass eine Änderung an einer Variablen (der von Ihnen eingegebenen) vorgenommen wurde und führt dann alle Filter erneut aus, um festzustellen, ob andere Änderungen vorliegen.
Und die Antwort darauf: Wie funktioniert die Datenbindung in AngularJS?
Bearbeiten : Wenn Sie wirklich die Schwerfälligkeit bemerken (die ich nicht auf einem älteren Core 2 Duo PC habe), gibt es wahrscheinlich eine Reihe von kreativen Möglichkeiten, die Sie je nach den Umständen umgehen können Ihre Benutzeroberfläche wird sein.
onblur
anstelle von onkeypress
nur mit einer Direktive wie folgt aktualisieren: Ссылка
Tags und Links javascript angularjs angularjs-scope angularjs-ng-repeat