SetTimeout en Angular no actualiza el scope

Estoy volviéndome loco con una cosa que parece obvia. Hago un setTimeout() de toda la vida desde AngularJS, cambio algunas variables del scope, como...

La FAQ SetTimeout en Angular no actualiza el scope tiene

Pertenece a la categoría:
Pregunta
Estoy volviéndome loco con una cosa que parece obvia. Hago un setTimeout() de toda la vida desde AngularJS, cambio algunas variables del scope, como siempre, pero no se muestran los cambios en la página. Es como si la vista no se enterase que ha cambiado variables, no muestra los cambios, aunque el objeto de los datos que cambio sí que está modificado. Simplemente no viaja al scope.
Respuesta de Miguel Angel Alvarez
Si, tu problema lo hemos tenido otras veces, pero afortunadamente tiene una solución sencilla. Resulta que setTimeout no le pide al scope que se actualicen sus datos. Mejor dicho, aunque actualices el scope, los datos no se aplican en el template HTML.

Es un poco desagradable, sí. Pero la solución es sencilla. Solo tienes que usar un servicio llamado $timeout, que sustituye al setTimeout de toda la vida, pero asegurando que los datos nuevos del scope viajen a la vista una vez acabe la ejecución de la función.

Tendrás que inyectar el servicio:

.controller("timeoutController", function($scope, $timeout){

Luego tendrás que usarlo igual que vienes usando setTimeout, pero en este caso $timeout:

$timeout(funcionConRetardo, 3000);
Volver al árbol de categoríasVolver al árbol de categorías
FAQ relacionadas
Volver al árbol de categoríasVolver al árbol de categorías