Às vezes, preciso usar $scope.$apply
no meu código e às vezes gera um erro de "resumo já em andamento". Então, comecei a encontrar uma maneira de contornar isso e encontrei esta pergunta: AngularJS: Impedir o erro $ digest já em andamento ao chamar $ scope. $ Apply () . No entanto, nos comentários (e no wiki do angular) você pode ler:
Não faça if (! $ Scope. $$ phase) $ scope. $ Apply (), isso significa que $ scope. $ Apply () não é alto o suficiente na pilha de chamadas.
Então agora eu tenho duas perguntas:
- Por que exatamente isso é um antipadrão?
- Como posso usar $ scope. $ Apply com segurança?
Outra "solução" para evitar o erro "resumo já em andamento" parece estar usando $ timeout:
$timeout(function() {
//...
});
Aquele é o caminho para ir? É mais seguro? Portanto, aqui está a verdadeira questão: Como posso eliminar totalmente a possibilidade de um erro de "resumo já em andamento"?
PS: Estou usando apenas $ scope. $ Apply em callbacks não angularjs que não são síncronos. (pelo que eu sei, essas são situações em que você deve usar $ scope. $ apply se quiser que suas alterações sejam aplicadas)
digest already in progress
erro
scope
de dentro do angular ou de fora do angular. Então de acordo com isso você sempre sabe se precisa ligarscope.$apply
ou não. E se você estiver usando o mesmo código parascope
manipulação angular / não angular , você está fazendo errado, ele deve estar sempre separado ... então, basicamente, se você se deparar com um caso em que precisa verificarscope.$$phase
, seu código não é projetado de forma correta, e sempre há uma maneira de fazê-lo 'da maneira certa'