Angular.js使用参数删除资源

Upv*_*ote 25 angularjs

我的休息api应对以下网址的DELETE请求

/api/users/{slug}
Run Code Online (Sandbox Code Playgroud)

因此,通过向指定用户(slug)发送删除,用户将被删除.这是服务代码:

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;
}); 
Run Code Online (Sandbox Code Playgroud)

我通过调用删除功能

user.$delete_user({id:user.id}, function(){}, function(response){}); 
Run Code Online (Sandbox Code Playgroud)

但是请求似乎发送到了错误的URL.

/api/users?id=4
Run Code Online (Sandbox Code Playgroud)

所以参数实际上是丢失的,因此我得不到405方法.有没有机会以我的api风格发送删除请求?

joa*_*mbl 29

params是您的操作中的默认请求参数的对象.如果你想要url参数,你必须在第二个参数中指定它们,如下所示:

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;
}); 
Run Code Online (Sandbox Code Playgroud)

这适用于:

// user has id
user.$delete_user(function(){
  //success
},function(){
  // error
});
Run Code Online (Sandbox Code Playgroud)

要么

var data = {id:'id_from_data'};
User.delete_user({},data);
Run Code Online (Sandbox Code Playgroud)

要么

var params = {id1:'id1_from_params'};
User.delete_user(params);
Run Code Online (Sandbox Code Playgroud)

我做了一个plnkr示例 - 您必须打开控制台以验证DELETE请求是否正确.

请参阅Angular资源文档中的parameterDefaults.