J'ai une application api et angularjs reposante. J'utilise $ resource dans une usine pour travailler avec cet api. J'ai un problème avec une seule demande. Je POSTE mon api pour créer des éléments.
/api/service/thing/make-things
Je dois transmettre dans ma demande des données. Voici ce que je fais:
$scope.someRequest = new SomeRequest(); // factory object returning an $resource $scope.someRequest.some_field = 'abc'; $scope.someRequest.$save({someAdditionalParams:'123'}, function(values){...handling response...});
Cela fonctionne bien et les données POST que je veux poster, mais dans ce cas particulier, ma réponse post est un ensemble d'objets.
[{somestuff:'123'}, {somestuff:'321'} ... ]
Angular essaie de le mapper à un objet et me lance une erreur que l'objet était attendu, mais a eu un tableau. J'ai essayé de créer une méthode de ressource séparée avec isArray: 1, mais elle a toujours échoué avec le même type d'erreur.
Donc, ma question est la suivante: comment gérer cette situation? Est-il possible d'annuler la copie de $ save résultat à $ resource object?
En utilisant $ save, il tentera de le repérer. Vous pouvez créer une nouvelle action avec isArray: true qui n'essaiera pas de mapper le résultat. Vous devriez évidemment gérer manuellement les résultats.
var someRequest = $resource('/api/service/thing/make-things',{'create': {method:'POST', isArray:true}}); someRequest.create({some_field = 'abc',someAdditionalParams:'123'},function(data){ $scope.someRequestArray = data; });
L'architecture True RESTful est censée renvoyer ce qui a été créé, c'est pourquoi $ save fonctionne comme il le fait. Vos besoins sont légèrement différents, donc une action personnalisée est nécessaire.