2012-07-26 8 views
22

Ich bin ziemlich neu zu eckig, aber ich fühle mich wie das ist irgendwie verrückt.Ist das normal für AngularJs Filtern

Ich habe mehrere Sammlungen über ng-repeat in einem Controller-Bereich angezeigt. Es gibt ein Eingabefeld für jede Liste, um eine einfache Abfrage durchzuführen. Ich habe mit verschiedenen Filtern in meinem Code herumgespielt und letztendlich eine console.log in meine Filterfunktion eingefügt. Ich erkannte, dass jedes Mal, wenn meine Filterfunktion für eine Liste aufgerufen wurde, sie für alle Listen im Bereich aufgerufen wurde. Darüber hinaus wurde die Filterfunktion jedes Mal zweimal aufgerufen. Bei 3 Sammlungen würde das Filtern einer der Listen die Filterfunktion sechsmal aufrufen.

Ich dachte, vielleicht war es nur mein benutzerdefinierter Filter, also habe ich es mit der Standardfilterfunktion ausprobiert. Die gleiche Geschichte. Hier ist mein Code:

https://dl.dropbox.com/u/905197/angular-filter-test.html

an die Konsole gehen und sehen Sie selbst:/

Was ich hier falsch mache? Das scheint so einfach zu sein, aber es macht so viel Arbeit.

Antwort

25

Dies ist normal, angularjs verwendet einen "dirty-check" -Ansatz, sodass alle Filter aufgerufen werden müssen, um festzustellen, ob Änderungen vorhanden sind. Danach erkennt es, dass Sie eine Änderung an einer Variablen haben (die, die Sie eingegeben haben), und dann führt es alle Filter erneut aus, um festzustellen, ob es andere Änderungen hat.

Siehe die erste Antwort von this Frage

+1

Interessant. Das erklärt, warum sie alle angerufen werden. Warum werden sie alle zweimal aufgerufen, wenn eine Veränderung eingetreten ist? –

+1

Der erste Anruf stammt von den Beobachtern, die die Änderung feststellen. Da es einen gibt, müssen sie erneut aufgerufen werden, um zu sehen, ob sich Neuigkeiten ändern, weil ein Beobachter Änderungen vornehmen kann. Dieser Prozess wird wiederholt, bis keine Änderungen mehr gefunden werden oder die "Schleife" die Anzahl der maximalen Interaktionen erreicht (ich denke, das ist 10). –

+0

Wie vermeide ich das? Ich mache einen JSON-Anruf, aber es kann bis zu 10 Mal aufgerufen werden, indem Sie einfach irgendwo klicken. – Gino

Verwandte Themen