Eu tenho um controlador simples que usa $ resource:
var Regions = $resource('mocks/regions.json'); $scope.regions = Regions.query();
Estou usando este controlador em uma diretiva (na function de link)
var regions = scope.regions;
Mas as regiões são indefinidas. É bastante lógica a chamada ser assíncrona.
Minha pergunta é como posso fazer para esperar o resultado e regiões ser uma matriz com todos os dados?
UPDATE :
Aqui a definição da diretiva
app.directive('ngMap', function() { return { restrict: 'EA', replace: 'true', scope: { }, template: '', controller: 'AccordMapCtrl', link: function(scope, element, attrs) { var regions = scope.regions; console.log(regions); for (var region in regions) {} }; });
Se você quiser usar o método asynchronous, você precisa usar a function callback por $ promise, aqui é exemplo:
var Regions = $resource('mocks/regions.json'); $scope.regions = Regions.query(); $scope.regions.$promise.then(function (result) { $scope.regions = result; });
Se você está procurando uma promise na chamada de resources, você deve usar
Regions.query().$q.then(function(){ .... })
Atualização: a syntax da promise é alterada nas versões atuais, que lê
Regions.query().$promise.then(function(){ ..... })
Aqueles que têm downvoted não sabem o que foi e quem primeiro adicionou essa promise ao object de recurso. Eu usei esse recurso no final de 2012 – sim 2012.
Você também pode fazer:
Regions.query({}, function(response) { $scope.regions = response; // Do stuff that depends on $scope.regions here });
/*link*/ $q.when(scope.regions).then(function(result) { console.log(result); });
var Regions = $resource('mocks/regions.json'); $scope.regions = Regions.query().$promise.then(function(response) { return response; });