Ich habe einen einfachen Controller, der $ resource verwendet:
var Regions = $resource('mocks/regions.json');
$scope.regions = Regions.query();
Ich benutze diesen Controller in einer Direktive (in der Link-Funktion)
var regions = scope.regions;
Aber Regionen sind undefiniert. Es ist ziemlich logisch, dass der Anruf asynchron ist.
Meine Frage ist, wie ich warten kann, bis das Ergebnis und die Regionen ein Array mit allen Daten sind.
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) {}
};
});
angularjs
promise
angular-resource
Thomas Pons
quelle
quelle
$promise.then(function(result){...});
.Antworten:
Wenn Sie eine asynchrone Methode verwenden möchten, müssen Sie die Rückruffunktion von $ versprechen verwenden. Hier ist ein Beispiel:
var Regions = $resource('mocks/regions.json'); $scope.regions = Regions.query(); $scope.regions.$promise.then(function (result) { $scope.regions = result; });
quelle
Regions
nicht woanders verwendet wird, dannresource('mocks/regions.json').query().$promise.then(function (result) { $scope.regions = result; });
würde sicherlich die Arbeit erledigen.$scope.regions = result
Ausführung wird nichts gerendert .Wenn Sie beim Ressourcenaufruf ein Versprechen erhalten möchten, sollten Sie es verwenden
Update: Die Versprechenssyntax wird in aktuellen Versionen geändert
Regions.query().$promise.then(function(){ ..... })
Diejenigen, die abgestimmt haben, wissen nicht, was es war, und die dieses Versprechen zuerst dem Ressourcenobjekt hinzugefügt haben. Ich habe diese Funktion Ende 2012 verwendet - ja 2012.
quelle
Sie könnten auch tun:
Regions.query({}, function(response) { $scope.regions = response; // Do stuff that depends on $scope.regions here });
quelle
/*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; });
quelle