2013-03-17 2 views
12

Я пытаюсь использовать $ ресурса для получения данных из статического файла 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'

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

+1

Я не уверен, но обратите внимание, что .query() не является синхронной операцией, то есть вы не можете перебирать результаты немедленно. – finishingmove

+0

Вы правы. Я использовал обратный вызов для повторения результатов. – codejammer

ответ

21

Вам не нужно указывать параметры действий по умолчанию для $resource методов (это «получить», «сохранить», «запрос», «удалить», «удалить»). В этом случае вы можете использовать .query() метод как (это требуется только определение сервиса будет chaged):

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

P.S. И еще один намек на то, что ваш пример развернутого JSON в хэш, а затем массив (именно поэтому вы не получили никакой ошибки толчка метода), если вам это нужно, чтобы быть массив установлен isArray: true к действию конфигурации:

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

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

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

Большое спасибо Дмитрию Евсееву. Я также пробовал использовать следующий код, и это сработало, но ваш ответ проще! 'angular.module ('upe.services', ['ngResource']). factory ('Profileslst', function ($ resource) { return $ resource ('services/profiles /: profileid.json', {}, { query: {method: 'GET', params: {profileid: 'profilelist '}, isArray: true} }); }); ' – codejammer

Смежные вопросы