Nadal borykam się z tym samym problemem, filtry i funkcje wewnątrz ng-repeat są nazywane przez cały ten cholerny czas.Angular.js zmienia jeden element powtarzania ng powodując, że filtry wszystkich innych elementów działają
Przykład tutaj: http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview, za każdym razem, gdy zmienisz coś w jednym wierszu, filtr someFilter
jest nazywany 1000 razy.
Podobno jest tak, ponieważ wszelkie zmiany w zakresie podrzędnym powodują powstawanie bąbelków do ich elementów nadrzędnych, co powoduje, że $ digest działa, powodując działanie wszystkich filtrów (https://stackoverflow.com/a/15936362/301596). Czy to prawda? Jak mogę temu zapobiec w moim konkretnym przypadku?
Jak sprawić, aby działał tylko na zmienionym elemencie?
W moim konkretnym przypadku zastosowania filtra nazywany jest nawet wtedy, gdy zmiana nie jest jeszcze na pozycje NG-repeat, to tak bez sensu i to jest rzeczywiście przyczyną problemów z wydajnością ..
// edit wyczyszczone wszystkie niepotrzebne rzeczy z plunker http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview
Tak czytam co Misko napisał, ja też przeczytać, jak to nie będzie widoczne nawet z 2000 elementów, ale jest to bardzo widoczne. To poważne bóle w dupie, gdy wszystkie te filtry są wywoływane za każdym razem, gdy wpisuję cokolwiek na wejściu przed faktycznym powtórzeniem ng (http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview), szczególnie gdy mam wiele filtrów w każdym rzędzie powtórzenia ng. Sprawia, że myślę, że lepiej zmodyfikować wartość, którą potrzebuję filtrować na init, a potem po zmianie. – foxx
Wspieram Cię w tym, że jest to naprawdę bolesna cecha kątowa, ponieważ filtry służą tylko do transformacji danych, więc nie powinny oglądać każdej linii. –
Więc jedynym rozwiązaniem są małe kolekcje? – Bart