2013-10-22 56 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被提交的請求主體的一部分,只是發送name在PUT有效載荷?我不控制我正在提交的API,它似乎不喜歡我發送的額外參數。

謝謝!

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

resource文檔說這個:

如果參數值與@前綴,則該參數的值被提取來自數據對象(對非GET操作有用)。

這意味着,這應該從數據中刪除參數:

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

,但它似乎並沒有工作。仍然處於虧損狀態。

+0

這是一個很大的猜測;但使用$ HTTP時;您可以添加一個轉換函數來修改請求。你可以用$資源做同樣的事情嗎? – JeffryHouser

+0

謝謝 - 這確實有用!請參閱上面的解決方案。但是,文檔提到了一種應該起作用的更簡單的方法,但不是。 –

+0

你應該發佈你的解決方案作爲正式答案[AKA回答你自己的問題]。它會幫助未來找到的人。 – JeffryHouser

回答

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

用於URL模板參數的第一個參數,並把您的文章數據的第二個參數像這樣:

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

下面是來自Angular docs顯示函數簽名行:

非GET「下課」交流蒸發散: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

相關問題