Czasami muszę użyć $scope.$apply
kodu w moim kodzie, a czasami wyświetla błąd „podsumowanie już w toku”. Zacząłem więc szukać sposobu obejścia tego problemu i znalazłem to pytanie: AngularJS: Zapobiegaj błędom $ Digest już w toku podczas wywoływania $ scope. $ Apply () . Jednak w komentarzach (i na kątowej wiki) możesz przeczytać:
Nie rób tego, jeśli (! $ Scope. $$ phase) $ scope. $ Apply (), oznacza to, że twój $ scope. $ Apply () nie jest wystarczająco wysoko na stosie wywołań.
Więc teraz mam dwa pytania:
- Dlaczego dokładnie jest to anty-wzór?
- Jak bezpiecznie używać $ scope. $ Apply?
Wydaje się, że innym „rozwiązaniem” błędu „podsumowanie już w toku” jest użycie $ timeout:
$timeout(function() {
//...
});
Czy to jest droga? Czy to jest bezpieczniejsze? Oto więc prawdziwe pytanie: jak mogę całkowicie wyeliminować możliwość wystąpienia błędu „podsumowanie już w toku”?
PS: Używam tylko $ scope. $ Stosuje się w wywołaniach zwrotnych innych niż angularjs, które nie są synchroniczne. (o ile wiem, są to sytuacje, w których musisz użyć $ scope. $ zastosuj, jeśli chcesz, aby zmiany zostały zastosowane)
scope
od wewnątrz, czy z zewnątrz kątowo. Dlatego zawsze wiesz, czy musisz zadzwonić,scope.$apply
czy nie. A jeśli używasz tego samego kodu zarówno doscope
manipulacji kątowych , jak i nie-kątowych , robisz to źle, zawsze powinien być oddzielony ... więc w zasadzie, jeśli napotkasz przypadek, w którym musisz sprawdzićscope.$$phase
, twój kod nie jest zaprojektowane w prawidłowy sposób i zawsze jest sposób, aby to zrobić