Existem alguns casos em que é necessário executar algum tipo de operação de tempo limite e frequentemente fazemos isso usando a setTimeout()
função JavaScript .
No entanto, se usarmos setTimeout()
em um aplicativo AngularJS, também precisamos usar $scope.$apply()
para garantir que quaisquer alterações no escopo sejam refletidas em outro lugar (ou seja, vinculado a dados em uma visualização).
O AngularJS fornece um wrapper útil para isso: $timeout()
– ele faz a $apply()
chamada para nós, então não precisamos fazer isso. Magia!
function Ctrl($scope, $timeout) {
$scope.timeInMs = 0;
var countUp = function() {
$scope.timeInMs+= 500;
$timeout(countUp, 500);
}
$timeout(countUp, 500);
}
E aqui está um JsFiddle mostrando que está funcionando: http://jsfiddle.net/otupman/fq4vg/
Atualização e aviso – se você estiver usando $timeout
para criar o que é essencialmente um intervalo; não – isso interromperá seus testes e2e 🙁 A solução alternativa é definir o padrão setTimeout
para o momento 🙁 🙁 🙁
Mais informações sobre o problema do github Angular aqui: https://github.com/angular/angular.js/issues/2402