Подтвердить что ты не робот

Как мне не отправлять параметры шаблона 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'});

но он, похоже, не работает. Все еще в растерянности.

4b9b3361

Ответ 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}