2013-10-22 15 views
21

は、私がこのように設定したリソースを持っていると仮定します。リクエストボディの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'}); 

が、動作していないよう:これはデータからパラメータを削除するべきであることを意味し

。まだ失われています。

+0

これは大きな時間推測です。しかし、$ HTTPを使用している場合。変換関数を追加して要求を変更することができます。 $ resourceで同じことをすることはできますか? – JeffryHouser

+0

ありがとうございます - それは動作します!上記の私の解決策を参照してください。しかし、ドキュメントには、作業するべき簡単な方法が記載されていますが、そうではありません。 –

+0

解決策を正式な回答[AKA自分の質問に答えてください]として投稿する必要があります。これは、将来見つかる人々に役立ちます。 – JeffryHouser

答えて

7

FWIWは、私はそうのようなtransformRequestパラメータを含めることで、回避策を見つけるReboog711 @に感謝をしました:

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

は、URLテンプレートパラメータの最初のパラメータを使用し、2番目のパラメータであなたのポストのデータを入れます

非GET「クラス」AC:

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

ここでは関数のシグネチャを示しAngular docsからのラインがあります:このようなション:

:Resource.action([パラメータ]、POSTDATA、[成功]、[エラー])

はここplunker

にあなたが得るリクエストは、体内のURLパラメータを持っていない例です

Request URL:http://run.plnkr.co/JAOqZqW6RSywatUM/badUrl/user/14 
Request Method:PUT 
Request Payloadview source 
{name:Bob Dole} 
+4

これは正解です。 – marapet

関連する問題