web-dev-qa-db-fra.com

AngularJS promesse de ressources

J'ai un contrôleur simple qui utilise $ resource: 

 var Regions = $resource('mocks/regions.json');

 $scope.regions = Regions.query();

J'utilise ce contrôleur dans une directive (dans la fonction de lien)

var regions = scope.regions;

Mais les régions ne sont pas définies. C'est assez logique l'appel est asynchrone. 

Ma question est de savoir comment puis-je attendre le résultat et les régions être un tableau avec toutes les données? 

UPDATE : 

Voici la définition de la directive

app.directive('ngMap', function() {
  return {
    restrict: 'EA',
    replace: 'true',
    scope: {

    },
    template: '<div id="map"></div>',
    controller: 'AccordMapCtrl',
    link: function(scope, element, attrs) {
      var regions = scope.regions;
      console.log(regions);

      for (var region in regions) {}
    };
  });
71
Thomas Pons

Si vous voulez utiliser une méthode asynchrone, vous devez utiliser la fonction de rappel par $ promise, voici un exemple:

var Regions = $resource('mocks/regions.json');

$scope.regions = Regions.query();
$scope.regions.$promise.then(function (result) {
    $scope.regions = result;
});
182
Andrey Pushkarev

Si vous souhaitez obtenir des promesses lors de l'appel de ressources, vous devez utiliser

Regions.query().$q.then(function(){ .... })

Mise à jour: la syntaxe de la promesse est modifiée dans les versions actuelles qui se lit comme suit

Regions.query().$promise.then(function(){ ..... })

Ceux qui ont voté vers le bas ne savent pas ce que c'était et qui a ajouté cette promesse à l'objet ressource. J'ai utilisé cette fonctionnalité à la fin de 2012 - oui 2012.

36
Mahbub

Vous pouvez aussi faire:

Regions.query({}, function(response) {
    $scope.regions = response;
    // Do stuff that depends on $scope.regions here
});
20
Andreas
/*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;
});
0
DW.Ding