2013-03-17 14 views
12

Sto cercando di usare $ risorsa per ottenere dati da un file JSON statica e qui è il frammento di codice:

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

Nel controllore,

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); 

} 

Ma ora mi trovo di fronte a un errore: TypeError: Object #<Resource> has no method 'push'

Potresti per favore aiutarmi dove sto andando male?

+1

non sono sicuro, a meno di notare che .query() non è un funzionamento sincrono, il che significa non è possibile scorrere i risultati immediatamente. – finishingmove

+0

Hai ragione. Ho usato un callback per scorrere i risultati. – codejammer

risposta

21

Non è necessario specificare il parametro actions per i metodi predefiniti $resource (questi sono 'get', 'save', 'query', 'remove', 'delete'). In questo caso è possibile utilizzare il metodo .query() come è (questo richiede unica definizione servizio da chaged):

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

P.S. E un altro suggerimento è che il vostro esempio JSON scartare in hash piuttosto che array (è per questo che si è ricevuto nessun errore metodo push), se avete bisogno di essere un array impostato isArray: true all'azione config:

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

E come @ finishingmove macchiato davvero non si può assegnare $resource risultato di ottenere immediatamente, fornire callback:

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

Grazie mille Dmitry Evseev. Ho provato anche il seguente codice e ha funzionato, ma la tua risposta è più semplice! 'angular.module ('upe.services', ['ngResource']). factory ('Profileslst', function ($ resource) { return $ resource ('services/profiles /: profileid.json', {}, { query: {metodo: 'GET', params: {profileid: 'profilelist '}, isArray: true} }); }); ' – codejammer

Problemi correlati