Как мне не отправлять параметры шаблона url с телом запроса в angular?
Предположим, что у меня есть ресурс, настроенный следующим образом:
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
в качестве части тела запроса и просто отправить name
в полезную нагрузку PUT? Я не контролирую API, который я отправляю, и, похоже, не нравится дополнительные параметры, которые я отправляю.
Спасибо!
Обновление - 10/25/13 - 13:38
Документация для resource говорит следующее:
Если значение параметра имеет префикс @, тогда значение этого параметра извлекается из объекта данных (полезно для операций без GET).
Это означает, что это должно удалить параметры из данных:
resource.save({type:'@user', id:'@14', name:'Bob Dole'});
но он, похоже, не работает. Все еще в растерянности.
Ответы
Ответ 1
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'}
}}
);
Ответ 2
Используйте первый параметр для параметров шаблона URL-адреса и поместите ваши данные после второго параметра следующим образом:
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}