我的休息api将DELETE请求转到以下网址
/api/users/{slug}
因此,通过向指定用户(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;
});
我通过
调用删除功能user.$delete_user({id:user.id}, function(){}, function(response){});
但请求似乎是发送到错误的网址。
/api/users?id=4
因此实际上缺少参数,因此我得不到405方法。有没有机会以我的api风格发送删除请求?
答案 0 :(得分:28)
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;
});
这适用于:
// user has id
user.$delete_user(function(){
//success
},function(){
// error
});
或
var data = {id:'id_from_data'};
User.delete_user({},data);
或
var params = {id1:'id1_from_params'};
User.delete_user(params);
我做了 plnkr-example - 您必须打开控制台以验证DELETE请求是否正确。
请参阅Angular resource documentation中的 parameterDefaults 。
答案 1 :(得分:2)
我有一段时间遇到这个问题我正在使用服务来添加/删除/更新类别。虽然传递参数使其工作正常但是当删除它时给了我一个?id = 1234而不是api / resource / 1234
我通过将默认参数设为字符串来解决这个问题。
///控制器
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"},
});
应该工作和生成的url,最初我将默认参数中的categoryId作为变量名。
api/resource/1234 etc
答案 2 :(得分:0)
只需省略参数
中的'@'即可 .factory('reportFactory', ['$resource', 'baseUrl', function ($resource, baseUrl) {
return $resource(baseUrl + '/keys/:id', {}, {
delete: { method: 'DELETE',
headers: {
'Content-Type': 'application/json'
},
params: {id: 'id'} }
})
}]);
这会给你:
http://localhost:8080/reports/api/keys/b8a8a8e39a8f55da94fdbe6c
没有问号
答案 3 :(得分:0)
如果要删除模型,则无需添加参数(无论如何,参数对DELETE不起作用):
$resource('/users/:id').delete({id: user.id}, function(res) {
...
})
或
$resource('/users/:role/:id').delete({role: 'visitor', id: user.id});
我不确定它是否是ngResource的错误。