A volte ho bisogno di usarlo $scope.$apply
nel mio codice ea volte genera un errore di "digest già in corso". Quindi ho iniziato a trovare un modo per aggirare questo problema e ho trovato questa domanda: AngularJS: Prevenire l'errore $ digest già in corso quando si chiama $ scope. $ Apply () . Tuttavia nei commenti (e sul wiki angolare) puoi leggere:
Non farlo se (! $ Scope. $$ fase) $ scope. $ Apply (), significa che il tuo $ scope. $ Apply () non è abbastanza alto nello stack di chiamate.
Quindi ora ho due domande:
- Perché esattamente questo è un anti-pattern?
- Come posso utilizzare in sicurezza $ scope. $ Apply?
Un'altra "soluzione" per prevenire l'errore "digest già in corso" sembra utilizzare $ timeout:
$timeout(function() {
//...
});
È questa la strada da percorrere? È più sicuro? Quindi ecco la vera domanda: come posso eliminare completamente la possibilità di un errore di "digest già in corso"?
PS: Sto usando solo $ scope. $ Apply nei callback non angularjs che non sono sincroni. (per quanto ne so, queste sono situazioni in cui è necessario utilizzare $ scope. $ apply se si desidera applicare le modifiche)
digest already in progress
errori
scope
dall'interno angolare o dall'esterno angolare. Quindi in base a questo sai sempre se devi chiamarescope.$apply
o meno. E se stai usando lo stesso codice sia per lascope
manipolazione angolare / non angolare , stai sbagliando, dovrebbe essere sempre separato ... quindi in pratica se ti imbatti in un caso in cui devi controllarescope.$$phase
, il tuo codice non lo è progettato in modo corretto, e c'è sempre un modo per farlo 'nel modo giusto'