62 votes

Une dimension tableau de chaînes de caractères pour être analysée à la 2d par angulaire de ressources

Le JSON suivants réponse du serveur

[
    "hello",
    "world"
]

est analysé dans un tableau 2d par cette ngResource service

myService.factory('Name', function($resource){
    return $resource(site_url+'api/accounts/:accountId/names/', {}, {
        list: {method:'GET', params:{}, isArray:true}
    });
});

appelé comme

$scope.names = Name.list({accountId:$scope.account.id}, function(e){
    console.log(e);
});

des traces de

[{"0":"h","1":"e","2":"l","3":"l","4":"o"},{"0":"w","1":"o","2":"r","3":"l","4":"d"}]

Tous les conseils?

99voto

jaime Points 15538

TLDR; ngResource s'attend à un objet ou un tableau d' objets dans votre réponse.


Lors de l' isArray est définie à l' true dans la liste des actions, l' ngResource module itère sur chaque article reçu dans la réponse et il crée une nouvelle instance d'une Ressource. Pour ce faire Angulaire effectue une copie en profondeur entre la réception et l' Resource classe, ce qui nous donne un objet avec des méthodes spéciales ($save, $delete et ainsi de suite)

Vérifiez la source ici.

En interne angulaire utilise angulaire.copie pour effectuer la copie en profondeur et cette fonction ne fonctionne qu'avec des objets et des tableaux, quand on passe d'une chaîne, il va la traiter comme un objet.

Les chaînes en JS peuvent se comporter comme des tableaux en fournissant un accès séquentiel à chaque personnage. angular.copy produira les éléments suivants lorsqu'il est passé d'une chaîne de caractères

angular.copy('hi',{})   => {0:'h', 1:'i'}

Chaque personnage devient une valeur dans un objet, et son indice de référence définie comme la clé. ngResource fournira une ressource avec des propriétés 0 et 1.


Vos choix sont:

Utiliser le niveau inférieur $http service

$http.get('/res').success(function(data){
  $scope.test = data;
});

Retourne un tableau d'objets dans votre réponse json

[{'data': "hello"}, {'data': "world"}] 

Intercepter la réponse et la modification de vos données

Si vous ne pouvez pas modifier les données que le serveur envoie en retour et que vous voulez utiliser ngResource vous aurez besoin pour transformer la réponse. Lire comment le faire ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X