假设我有这样的资源设置:
resource = $resource(
"http://foo.com/service/:type/:id",
{},
{save: {method:'PUT', params: {type:'@type', id: '@id'}}}
);
resource.save({type:'user', id:14, name:'Bob Dole'});
有什么方法可以阻止type
和id
作为请求正文的一部分提交,只是在PUT有效负载中发送name
?我不控制我提交的API,它似乎不喜欢我发送的额外参数。
谢谢!
更新 - 10/25/13 - 13:38
resource的文档说明了这一点:
如果参数值以@为前缀,则从数据对象中提取该参数的值(对于非GET操作非常有用)。
这意味着这应该从数据中删除参数:
resource.save({type:'@user', id:'@14', name:'Bob Dole'});
但它似乎不起作用。还是不知所措。
答案 0 :(得分:33)
使用您的网址模板参数的第一个参数,并将您的发布数据放在第二个参数中,如下所示:
resource.save({id:14, type:'user'}, {name:'Bob Dole'});
以下是Angular docs中显示函数签名的行:
非GET“类”操作:Resource.action([parameters],postData,[success],[error])
以下是plunker
中的示例您获得的请求在正文中没有url参数:
Request URL:http://run.plnkr.co/JAOqZqW6RSywatUM/badUrl/user/14
Request Method:PUT
Request Payloadview source
{name:Bob Dole}
答案 1 :(得分:7)
FWIW,我确实找到了一个解决方法,感谢@ Reboog711,通过包含一个transformRequest参数,如下所示:
resource = $resource(
"http://foo.com/service/:type/:id",
{},
{save: {
method:'PUT',
transformRequest:function(data) {
delete data.type;
delete data.id;
return JSON.stringify(data);
},
params: {type:'@type', id: '@id'}
}}
);