Anguleux.js supprimer la ressource avec le paramètre

Mon api rest accpets SUPPRIMER les demandes à l'adresse suivante

/api/users/{slug}

ainsi, en envoyant delete à un utilisateur spécifié (slug) l'utilisateur serait supprimé. voici le code de la fonction:

angular.module('UserService',['ngResource']).factory('User', function($resource){
    var User = $resource('/api/users/:id1/:action/:id2', //add param to the url
    {}, 
    { 
        delete_user: {
            method: 'DELETE',
            params: {
                id1:"@id"
            }
        },
        update: {
            method: 'PUT',
            params: {
                id1:"@id"
            }
        }
    }); 

    return User;
}); 

j'appelle la fonction supprimer via

user.$delete_user({id:user.id}, function(){}, function(response){}); 

cependant la requête semble être envoyée à la mauvaise url.

/api/users?id=4

donc le paramètre est en fait manquant, en conséquence j'obtiens une méthode 405 non autorisée. Est-il possible d'envoyer la demande de suppression dans le le style de mon api?

25
demandé sur Zaheer Ahmed 2013-04-23 14:50:46
la source

4 ответов

params est un objet des paramètres de requête par défaut dans vos actions. Si vous voulez des paramètres url, vous devez les spécifier dans le second paramètre comme ceci:

angular.module('UserService',['ngResource']).factory('User', function($resource){
    var User = $resource('/api/users/:id1/:action/:id2', //add param to the url
    {id1:'@id'},
    { 
        delete_user: {
            method: 'DELETE'
        }
    }); 

    return User;
}); 

cela fonctionne avec:

// user has id
user.$delete_user(function(){
  //success
},function(){
  // error
});

ou

var data = {id:'id_from_data'};
User.delete_user({},data);

ou

var params = {id1:'id1_from_params'};
User.delete_user(params);

j'ai fait un plnkr-exemple - vous devez ouvrir votre console pour vérifier que les requêtes de suppression sont correctes.

voir parameterDefaults dans le Angulaire de ressources documentaires.

28
répondu joakimbl 2013-04-23 22:41:58
la source

j'ai eu ce problème pendant un certain temps j'ai utilisé un service pour ajouter / supprimer / mettre à jour des catégories. En passant dans les params pour obtenir il a fonctionné très bien, mais puis en supprimant il me donnait un ?id=1234 au lieu de api / resource / 1234

j'ai contourné cela en faisant le param par défaut une chaîne.

///Controller

Service.delete({categoryId:id}, function(resp){
  console.log(resp)//whatever logic you want in here 
});

/ / SERVICES

$resource('api/resource/:categoryId', {"categoryId":"@categoryId"}, {
   query:{method:"GET"},
   delete:{method:"DELETE"},

});

devrait fonctionner et l'url résultante sera, à l'origine j'avais categorid dans les paramètres par défaut comme un nom de la variable.

api/resource/1234 etc
2
répondu Evan Burbidge 2016-07-12 12:43:20
la source

il suffit d'omettre le ' @ ' dans le paramètre

   .factory('reportFactory', ['$resource', 'baseUrl', function ($resource, baseUrl) {
        return $resource(baseUrl + '/keys/:id', {}, {
        delete: { method: 'DELETE',
            headers: {
                'Content-Type': 'application/json'
            },
            params: {id: 'id'} }
       })
}]);

cela vous donnera:

  http://localhost:8080/reports/api/keys/b8a8a8e39a8f55da94fdbe6c 

sans le point d'interrogation

0
répondu Laura Liparulo 2014-06-03 11:43:54
la source

si vous voulez supprimer un model, il n'est pas nécessaire d'ajouter des params (les params ne fonctionnent pas pour supprimer de toute façon):

$resource('/users/:id').delete({id: user.id}, function(res) {
  ...
})

ou

$resource('/users/:role/:id').delete({role: 'visitor', id: user.id});

Je ne suis pas sûr que ce soit un bug de ngResource.

0
répondu Alvan Zhu 2016-01-29 23:27:17
la source

Autres questions sur