75

我有一个使用 $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) {}
    };
  });
4

4 回答 4

185

如果要使用异步方法,则需要通过 $promise 使用回调函数,示例如下:

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

$scope.regions = Regions.query();
$scope.regions.$promise.then(function (result) {
    $scope.regions = result;
});
于 2013-11-16T13:03:16.533 回答
36

如果您希望在资源调用中获得承诺,您应该使用

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

更新:在当前版本中更改了承诺语法,内容为

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

那些投反对票的人不知道它是什么以及谁首先将此承诺添加到资源对象。我在 2012 年末使用了这个功能——是的 2012 年。

于 2013-10-21T09:49:44.810 回答
20

你也可以这样做:

Regions.query({}, function(response) {
    $scope.regions = response;
    // Do stuff that depends on $scope.regions here
});
于 2014-06-20T11:17:27.097 回答
0
/*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;
});
于 2017-06-10T03:48:32.083 回答