В AngularJS ресурса обещают



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



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

$scope.regions = Regions.query();


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



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

4 ответов:

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

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

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

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

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

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

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

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

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

Regions.query({}, function(response) {
    $scope.regions = response;
    // Do stuff that depends on $scope.regions here
});
/*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;
});

Comments

    Ничего не найдено.