web-dev-qa-db-ja.com

リクエスト本文をAngularでURL​​テンプレートパラメータを送信しないようにするにはどうすればよいですか?

次のようにリソースを設定するとします。

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がリクエスト本文の一部として送信されないようにし、PUTペイロードでnameを送信する方法はありますか?送信するAPIを制御していません。また、送信する追加のパラメーターが気に入らないようです。

ありがとう!

更新-10/25/13-13:38

resource のドキュメントには次のように書かれています。

パラメータ値の前に@が付いている場合、そのパラメータの値はデータオブジェクトから抽出されます(非GET操作に役立ちます)。

これは、データからパラメータを削除する必要があることを意味します。

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

しかし、それは機能していないようです。まだ途方に暮れています。

21
Greg Michalec

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

URLテンプレートパラメータの最初のパラメータを使用し、次のように投稿データを2番目のパラメータに配置します。

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}
33
Lindsey