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

Использование ресурса AngularJS $для получения данных

Я пытаюсь использовать $resource для получения данных из статического json файла, и вот фрагмент кода:

 angular.module('app.services', ['ngResource']).
  factory('profilelist',function($resource){
    return $resource('services/profiles/profilelist.json',{},{
        query:{method:'GET'}
    });
});

В контроллере

function ProfileCtrl($scope,profilelist) {
$scope.items = [];
$scope.profileslist = profilelist.query();
for (var i=0;i<=$scope.profileslist.length;i++){
    if($scope.profileslist[i] && $scope.profileslist[i].profileid){
        var temp_profile = $scope.profileslist[i].profileid;
    }
    $scope.items.push(temp_profile);

}

Но теперь я столкнулся с ошибкой: TypeError: Object #<Resource> has no method 'push'

Не могли бы вы помочь мне, где я ошибаюсь?

4b9b3361

Ответ 1

Вам не нужно указывать параметры действий для стандартных методов $resource (это "get", "save", "query", "remove", "delete" ). В этом случае вы можете использовать метод .query() как есть (для этого требуется только определение сервиса):

angular.module('app.services', ['ngResource']).
  factory('profilelist',function($resource){
    return $resource('services/profiles/profilelist.json');
  });

P.S. И еще один намек на то, что ваш пример развернул json в хеш, а не в массив (почему вы не получили ошибку метода push), если вам нужно, чтобы он был набором массива isArray: true в действие config:

'query':  {method:'GET', isArray:true}

И поскольку @finishingmove spotted вы действительно не можете назначить $resource результат для немедленного получения, выполните обратный вызов:

$scope.profileslist = profilelist.query(function (response) {
    angular.forEach(response, function (item) {
        if (item.profileid) {
            $scope.items.push(item.profileid);
        }
    });
});