AngularJS: use $ timeout, não setTimeout

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 $timeoutpara criar o que é essencialmente um intervalo; não – isso interromperá seus testes e2e 🙁 A solução alternativa é definir o padrão setTimeoutpara o momento 🙁 🙁 🙁

Mais informações sobre o problema do github Angular aqui: https://github.com/angular/angular.js/issues/2402