web-dev-qa-db-ja.com

AngularJSリソースプロミス

私は$ resourceを使用するシンプルなコントローラーを持っています:

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

 $scope.regions = Regions.query();

私はこのコントローラをディレクティブで使用しています(リンク関数で)

var regions = scope.regions;

しかし、地域は未定義です。呼び出しは非同期です。

私の質問は、結果を待つためにどうすればよいですか、領域はすべてのデータを持つ配列ですか?

UPDATE : 

ここで、ディレクティブの定義

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) {}
    };
  });
73
Thomas Pons

非同期メソッドを使用する場合、$ promiseによるコールバック関数を使用する必要があります。以下に例を示します。

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

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

リソース呼び出しで約束を取得したい場合は、使用する必要があります

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

更新:promise構文は、現在のバージョンで変更されます

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

ダウン投票した人はそれが何であるかを知らず、この約束を最初にリソースオブジェクトに追加した人は知りません。 2012年後半にこの機能を使用しました-はい、2012年。

36
Mahbub

次のこともできます。

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