55 votes

Que signifie @id tel qu'il est passé à $resource ?

$resource("/entries/:id", {id: "@id"}, {update: {method: "PUT"}})

Qu'est-ce que l'@id ?

Sur la ressource $resource page doc quelqu'un dit cela ci-dessous, mais je ne comprends toujours pas.

"Si la valeur du paramètre est préfixée par @, alors la valeur de ce paramètre est extraite de l'objet de données (utile pour les opérations nonGET)." L'objet de données fait ici référence à l'objet postData si l'action nonGET "class" est utilisée, ou l'instance elle-même si l'action nonGET "instance" est utilisée.

67voto

rGil Points 1955

Si je comprends bien, et il se peut que je ne comprenne pas, le paramètre {id: @id} est une illustration d'une autre façon de fournir un élément de données à votre variable url.

Compte tenu de cette méthode :

var myResource = $resource("/posts/:theName", 
                           {theName: '@petName'},
                           {enter : {
                                      method: "POST", 
                                      isArray: false
                                     }
                            });

Si j'ai un attribut "petName" dans les données que j'affiche, la valeur de cet attribut sera placée dans le fichier :theName dans mon url. Imaginez que les données du message soient {"petType": "cat", "petName": "Spot"} l'url sera la suivante "/posts/Spot" . Dans mon esprit, le @ signifie "attribut" de l'objet à enregistrer.

Enlevez le @ de cette valeur, et la variable url fera directement référence à la valeur de ce paramètre de ressource :

{theName: 'petName'} //no "@"
// url output ---->   '/posts/petName'

.

Voici la chaîne des références :

//url var--> //$resource param {..}  --->//Object to be posted
:theName---> {theName ----> @petName ---> {petName---> "Spot"

Il n'a fallu que 5 étapes pour mettre "Spot" dans l'url !

.

Exemple d'une instance de ressource utilisant l'exemple ci-dessus :

var postData = new myResource();
    postData.petType = "cat";
    postData.petName = "Spot";
    postData.$enter({}, function(data){
        $scope.data = data;
    })
    // url to post to will be '/posts/Spot', postData object will be 
    //  {"petType":"cat", "petName:"Spot"}

D'ailleurs, les documents peuvent être très confus. Avez-vous déjà suivi un cours difficile et le professeur était un homme brillant qui parlait à peine votre langue ? Ouaip.

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