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 $http
fá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.timeout
acima, qualquer atualização feita para $scope.items
não será vista pelo Angular e a visualização que usa este controlador não será atualizada.