2014-09-15 3 views
5

Je suis un débutant avec AngularJS, et ne peut pas trouver mon erreur dans ce codeAngularJS URL ressources

var myCarResource = $resource('cars/:carId', 
     { 
      carId:'@id' 
     }); 
    var car = myCarResource.get({id:'abc'}); 

URL prévue: .../cars/abc

L'URL est appelée: .../cars?id=abc

J'utilise angularjs v1.2.24

Quelqu'un peut-il m'aider? Merci

+2

Peut-être cela peut aider http://stackoverflow.com/questions/16677487/angularjs-resource-builds-wrong-resource-url – Yalamber

Répondre

5

Comme indiqué dans le $resourceparamDefaults documentation:

Compte tenu d'un modèle/chemin /: verbe et paramètre {verbe: 'saluer', Salutation: 'Bonjour'} résultats dans l'URL/chemin/salut? salutation = Bonjour.

Si la valeur du paramètre est préfixé avec @ la valeur de ce paramètre sera extrait de la propriété correspondante sur l'objet de données (fourni lors de l'appel d'une méthode d'action). Par exemple, si l'objet defaultParam est {someParam: « @someProp »} la valeur de someParam sera data.someProp

Cela donne à penser que tout verbe défini dans l'URL parameterizd qui correspond aux clés définies dans les paramètres par défaut de $resource ou les paramètres des méthodes de classe $resource (get, save, etc ..) auront la valeur correspondante de cette clé pour remplacer le verbe dans l'url. La notation « @ » d'autre part, n'a pas été expliquée correctement, dans ce contexte, il aurait dû être:

Si la valeur du paramètre est préfixé avec @ la valeur de ce paramètre sera extrait du correspondant propriété sur l'objet de données (fournie lors de l'appel d'une méthode d'action instance).

méthodes d'action de l'instance ($ obtenir, économiser $, supprimer $, etc ..), sont des méthodes qui sont utilisées pour objets de données récupéré à l'aide $resource méthodes d'action de classe. Ils sont généralement utiles lors du chaînage de requêtes avec les mêmes ressources.

EXAMPLE DEMO

Supposons que votre cars/abc retourne un JSON de réponse:

{ 
    "id": "abc" 
} 

Lire les commentaires montrant les réponses de chaque appel de méthode d'action.

var myCarResource = $resource('cars/:carId', 
{ 
    carId:'@id' 
}); 


// This sends a GET request '/cars/?id=abc 
myCarResource.get({id:'abc'}); 

// This sends a GET request '/cars/abc' 
myCarResource.get({carId:'abc'}); // returns {"id": "abc"} 

myCarResource.get({carId:'abc'}).$promise.then(function(car) { 

    // sends a POST request '/cars/abc', it replaces the :carId verb from the 
    // @id notation you have defined in the parameter default. It also sends, 
    // other parameter defaults defined with '@' that are defined as verbs in the url. 
    car.$save(); 

}); 
+0

De @Yalamber commentaire/lien ci-dessus, une autre option est de faire ce qui suit : 'myCarResource.get ({}, {id: 'abc'}); 'De ma compréhension limitée, je crois que le premier objet est directement lié au modèle d'URL, et doit donc correspondre aux noms de: param dans l'URL (dans ce cas, carId). Le second objet est celui qui est utilisé lorsque vous utilisez '@id' et va tirer l'ID du second objet et le faire correspondre à: carId –

Questions connexes