Angular.js ändert sich bei einem Element von ng-repeate, das bewirkt, dass Filter für alle anderen Elemente ausgeführt werden

8

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    Ссылка

    
foxx 22.04.2013, 13:05
quelle

1 Antwort

4

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.

  1. Sie können die Zeile in den Bearbeitungsmodus versetzen, während der Benutzer die Daten bearbeitet, um die Änderungen zu isolieren, und das Modell erneut synchronisieren, wenn der Benutzer den Bearbeitungsmodus nicht mehr verwendet.
  2. Sie können das Modell onblur anstelle von onkeypress nur mit einer Direktive wie folgt aktualisieren: Ссылка
Langdon 22.04.2013, 13:46
quelle