21

假设我有这样的资源设置:

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'});

有什么方法可以阻止typeid作为请求正文的一部分提交,而只是发送namePUT 有效负载?我不控制我提交的 API,而且它似乎不喜欢我发送的额外参数。

谢谢!

更新- 2013 年 10 月 25 日 - 13:38

资源文档是这样说的:

如果参数值以 @ 为前缀,则从数据对象中提取该参数的值(对于非 GET 操作很有用)。

这意味着这应该从数据中删除参数:

resource.save({type:'@user', id:'@14', name:'Bob Dole'});

但它似乎不起作用。还是不知所措。

4

2 回答 2

33

将第一个参数用于您的 url 模板参数,并将您的帖子数据放在第二个参数中,如下所示:

resource.save({id:14, type:'user'}, {name:'Bob Dole'});

这是Angular 文档中显示函数签名的行:

非 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}
于 2014-07-09T16:34:39.903 回答
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'}
    }}
);
于 2013-10-27T23:25:11.867 回答