2013-06-29 28 views
0

我正在嘗試編寫一個客戶端,它執行所有四個REST動詞(GET/POST/PUT/DELETE)並獲得了除PUT之外的所有內容。我正在從事的REST/CRUD API想要通過調用PUT/realmen/ID字符串並將鍵值對包括爲JSON來更新條目。對於POST來說,這似乎是「自動」工作的,但不適用於PUT。Angular JS:發送PUT請求中的表單字段數據(如POST)

我的HTML看起來像:

<div id="list"> 
<form novalidate class="edit-form"> 
<p>Title <input ng-model="realmen.title" type="text" value="{{realmen.title}}" /></p> 
<p>Real Men <input ng-model="realmen.realmen" type="text" value="{{realmen.realmen}}" /> </p> 
<p>Real Role-Players <input ng-model="realmen.realroleplayers" type="text" value="realmen.realroleplayers}}" /></p> 
<p>Loonies <input ng-model="realmen.loonies" type="text" value="{{realmen.loonies}}" /></p> 
<p>Munchkins <input ng-model="realmen.munchkins" type="text" value="{{realmen.munchkins}}" /></p> 
<input ng-model="realmen.entryId" type="hidden" value="{{entryId}}"/> 
<button ng-click="change()">UPDATE ({{entryId}})"</button></p> 
</form> 
</div> 

我的控制器看起來像:

$scope.realmen = RealMen.get({entryId: $routeParams.entryId}, function() { 
     $scope.master = angular.copy($scope.realmen); // For resetting the form 
}); 

$scope.change = function() { 
    console.log($scope.realmen); 
    RealMen.update({entryId: $scope.entryId}, function() { 
      $location.path('/'); 
    }); 
} 

最後,我的服務看起來像:

angular.module('realmenServices', ['ngResource']). 
factory('RealMen', function($resource){ 
    var RealMen = $resource(
     'http://localhost\\:3000/realmen/:entryId', 
     {}, 
     { 
       query: {method:'GET', params:{entryId:''}, isArray:true}, 
       post: {method:'POST'}, 
       update: {method: 'PUT', params:{entryId:'@entryId'}}, 
       remove: {method:'DELETE'} 
     }); 

    return RealMen; 
}); 

認沽獲取調用與URL中正確的id值,但Request Payload只包含entryId,所以後端API不會獲得預期的密鑰和值es並且基本上將數據庫中的記錄清空。

console.log($ scope.realmen)確實顯示了表單字段以及大量額外的數據。我試着調用RealMen.update($ scope.realmen,...)(類似於調用.save()),但所有這些額外的字段都以一種極其醜陋的方式作爲查詢字符串參數添加到URL中。

回答

0

由於您的$scope.realmen是資源實例,而不是使用RealMen.update,您可以撥打$scope.realmen.$update()(請注意,有一個「$」)。實例操作方法將負責爲您發送數據。

+0

再次感謝,jaux。 $ update使用正確格式(/ realmen/ID-字符串)調用PUT URL,但有效負載有兩個額外字段(_id和entryID)並導致MongoDB發生錯誤: 更新條目時出錯:MongoError:can not更改舊文檔的_id:{_id:ObjectId('51ce617853c6f60000000001'),entryId:「51ce617853c6f60000000001」} new:{_id:「51ce617853c6f60000000001」,entryId:「51ce617853c6f60000000001」,標題:「A」,realmen:「B」, realroleplayers:「C」,loonies:「D」,munchkins:「E」} 有沒有辦法從請求有效載荷中去掉這些內容? – PrestoJeff