EDIT: Esta resposta foi focada principalmente na versão 1.0.X. Para evitar confusão, está sendo alterado para refletir a melhor resposta para TODAS as versões atuais do Angular até hoje, 05/12/2013.
A idéia é criar um serviço que retorne uma promessa aos dados retornados, depois chame isso em seu controlador e lide com a promessa para preencher sua propriedade $ scope.
O serviço
module.factory('myService', function($http) {
return {
getFoos: function() {
//return the promise directly.
return $http.get('/foos')
.then(function(result) {
//resolve the promise as the data
return result.data;
});
}
}
});
O controlador:
Manipule o then()método da promessa e obtenha os dados. Defina a propriedade $ scope e faça o que mais for necessário.
module.controller('MyCtrl', function($scope, myService) {
myService.getFoos().then(function(foos) {
$scope.foos = foos;
});
});
Resolução Promise In-View (somente 1.0.X):
No Angular 1.0.X, o objetivo da resposta original aqui, as promessas receberão um tratamento especial da View. Quando eles resolverem, seu valor resolvido será vinculado à exibição. Este foi descontinuado no 1.2.X
module.controller('MyCtrl', function($scope, myService) {
// now you can just call it and stick it in a $scope property.
// it will update the view when it resolves.
$scope.foos = myService.getFoos();
});