Não evite o ciclo de digestão.

Parece que window.setTimeout contorna o ciclo de resumo no AngularJS. Você pode ter um controlador com uma função (como a abaixo) que obtém algum JSON usando dados de outra solicitação JSON (que pode ou não ser feito ainda). Isso não funcionará se você usar window.timeout, então use $ timeout do Angular .

Uma promessa cobrindo as duas solicitações poderia ser usada, mas no meu caso o primeiro pedaço de JSON é buscado durante a module.run()fase de busca de alguns dados do usuário.

Este código assume AngularJS 1.1.4 (instável) e uma $httpfábrica de serviço denominada myHttp.

angular.module('yourmodulenamehere').controller("controllername", function($scope, $rootScope, $timeout, myHttp) {
$scope
.items = [];
$scope
.getSomething = function() {
if ($rootScope.user_id) { // use $rootScope with caution
$scope
.items = myHttp.get( // pass three things to the GET...
'someurl', // 1. url
{ "foo": "bar" }, // 2. a params object
function(obj) { // 3. what to do when the job is done
if (obj.status === 200) {
$scope
.items = obj.data.items;
} else {
console
.log("AJAX call failed, status code = " + obj.status);
}
}
);
} else { // otherwise, try again in a bit
// Don't use window.setTimeout here, it circumvents the digest cycle
$timeout
($scope.getSomething, 100);
} // end if
};
});

Se você usar window.timeoutacima, qualquer atualização feita para $scope.itemsnão será vista pelo Angular e a visualização que usa este controlador não será atualizada.