> Faqs > SetTimeout en Angular no actualiza el scope

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 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.

Respuestas

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);

Miguel Angel
3310 147 216 17