it-swarm.com.de

AngularJS Ressourcenversprechen

Ich habe einen einfachen Controller, der $ resource verwendet: 

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

 $scope.regions = Regions.query();

Ich verwende diesen Controller in einer Direktive (in der Link-Funktion)

var regions = scope.regions;

Aber Regionen sind undefiniert. Es ist ziemlich logisch, dass der Aufruf asynchron ist. 

Meine Frage ist, wie kann ich das Ergebnis abwarten und Regionen ein Array mit allen Daten sein? 

UPDATE : 

Hier die Definition der Richtlinie

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

Wenn Sie eine asynchrone Methode verwenden möchten, müssen Sie die Callback-Funktion von $ promise verwenden. Hier ein Beispiel:

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

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

Wenn Sie im Ressourcenaufruf ein Versprechen erhalten möchten, sollten Sie verwenden

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

Update: Die Versprechenssyntax wurde in den aktuellen Versionen geändert

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

Diejenigen, die das Abstimmen abgelehnt haben, wissen nicht, was es war, und wer dieses Versprechen zuerst dem Ressourcenobjekt hinzugefügt hat. Ich habe diese Funktion Ende 2012 verwendet - ja 2012.

36
Mahbub

Sie könnten auch tun:

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