A veces necesito usar $scope.$apply
en mi código y, a veces, arroja un error de "resumen ya en progreso". Así que comencé a encontrar una manera de evitar esto y encontré esta pregunta: AngularJS: Prevenga el error $ digest ya en progreso al llamar a $ scope. $ Apply () . Sin embargo, en los comentarios (y en la wiki angular) puedes leer:
No lo haga si (! $ Scope. $$ phase) $ scope. $ Apply (), significa que su $ scope. $ Apply () no es lo suficientemente alto en la pila de llamadas.
Entonces ahora tengo dos preguntas:
- ¿Por qué exactamente es esto un anti-patrón?
- ¿Cómo puedo usar $ scope. $ De forma segura?
Otra "solución" para evitar el error "resumen ya en progreso" parece estar usando $ timeout:
$timeout(function() {
//...
});
¿Es ese el camino a seguir? Es mas seguro? Entonces, aquí está la pregunta real: ¿Cómo puedo eliminar por completo la posibilidad de un error de "resumen ya en progreso"?
PD: solo estoy usando $ scope. $ Apply en devoluciones de llamada no angularjs que no son síncronas. (hasta donde yo sé, esas son situaciones en las que debe usar $ scope. $ apply si desea que se apliquen sus cambios)
scope
desde dentro de angular o desde fuera de angular. Entonces, de acuerdo con esto, siempre sabrá si necesita llamarscope.$apply
o no. Y si está usando el mismo código parascope
manipulación angular / no angular , lo está haciendo mal, siempre debe estar separado ... así que básicamente si se encuentra con un caso en el que necesita verificarscope.$$phase
, su código no es diseñado de manera correcta, y siempre hay una manera de hacerlo 'de la manera correcta'