Подтвердить что ты не робот

Угловой ресурс AngularJS

У меня есть простой контроллер, который использует $resource:

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

 $scope.regions = Regions.query();

Я использую этот контроллер в директиве (в функции связи)

var regions = scope.regions;

Но регионы undefined. Это довольно логичный вызов асинхронный.

Мой вопрос: как я могу подождать результата, а регионы - массив со всеми данными?

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) {}
    };
  });
4b9b3361

Ответ 1

Если вы хотите использовать асинхронный метод, вам нужно использовать функцию обратного вызова по $prom, вот пример:

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

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

Ответ 2

Если вы хотите получить обещание в вызове ресурса, вы должны использовать

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

Обновление: синтаксис обещаний изменяется в текущих версиях, который читает

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

Те, кто имеет downvoted, не знают, что это было и кто первым добавил это обещание ресурсу. Я использовал эту функцию в конце 2012 года - да 2012 года.

Ответ 3

Вы также можете сделать:

Regions.query({}, function(response) {
    $scope.regions = response;
    // Do stuff that depends on $scope.regions here
});

Ответ 4

/*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;
});