1

這裏是我的UserServiceAngularJS:PUT發送帶有URL數據,但不能作爲JSON數據

angular.module('userServices', ['ngResource']).factory('User', function($resource) { 
    return $resource('/users/:userId', 
     // todo: default user for now, change it 
     {userId: 'bd675d42-aa9b-11e2-9d27-b88d1205c810'}, 
     {update: {method: 'PUT', params:{profile: '@profile'}, isArray: false}} 
); 
}); 

在我的控制,我做

$scope.save = function() { 
    $scope.user.$update({profile: $scope.profile}); 
} 

但是,當我看到網絡選項卡在Chrome中,我請參閱

Request URL:http://localhost:5000/users/bd675d42-aa9b-11e2-9d27-b88d1205c810?profile=%5Bobject+Object%5D 
Request Method:PUT 
Status Code:200 OK 

如何發送此數據作爲data有效載荷?讓URL

http://localhost:5000/users/bd675d42-aa9b-11e2-9d27-b88d1205c810 

和數據都按

{ 
    day_in_month: 5 
} 

我的端點預計的數據是請求部分,以便它可以解析它作爲request.json

謝謝

回答

10

@lucuma答案解決了我的問題。

我分享從我的代碼基地進行更改爲每@ lucuma的建議後,工作的代碼(非常感謝@lucuma!)

UserService貌似

angular.module('userServices', ['ngResource']).factory('User', function($resource) { 
    return $resource('/users/:userId', 
     // todo: default user for now, change it 
     {userId: 'bd675d42-aa9b-11e2-9d27-b88d1205c810'}, 
     {update: {method: 'PUT', data:{}, isArray: false}} // add data instead of params 
); 
}); 

ProfileController看起來像

function ProfileController($scope, User) { 
    $scope.profile = {}; 
    $scope.user = User.get(); 
    $scope.save = function() { 
     // I was using $scope.user.$update before which was wrong, use User.update() 
     User.update($scope.profile, 
      function (data) { 
       $scope.user = data; // since backend send the updated user back 
      }); 
    } 

做了這些改變之後,我在Chrome我的網絡選項卡中如預期

Request URL:http://localhost:5000/users/bd675d42-aa9b-11e2-9d27-b88d1205c810 
Request Method:PUT 
Status Code:200 OK 
Request Payload: 
{"day_in_month":25} 
+0

我有一個類似的挫敗與.update反對。$更新。我認爲是因爲我們使用User作爲返回$ resource的服務(而不是將$ resource分配給控制器中的變量)。希望這個評論能幫助其他人試圖做到這一點。 (它肯定會幫助我!) – timhc22

8

我建議您對更新聲明進行以下更改:

{update: {method: 'PUT', data:{profile:'@profile'}, isArray: false}}

查看此plunker的網絡選項卡。 -v.1.1.5

以下是穩定version 1.0.7上的相同示例。

+0

謝謝@lucuma,我可以看到它適用於你的闖入者,我嘗試過同樣的事情,但不是爲我工作,它仍然在'URL'中,我使用'v 1.0.6' 'angular.js'和'angular-resource.js' – daydreamer

+0

這裏使用最新的穩定版本(1.0.7):http://plnkr.co/edit/DgmEwxV7T63IPZoNdBxe?p=preview它的功能是相同。 – lucuma

+0

巨大的謝謝@lucuma,我實際上這樣做是錯誤的,我將添加我的答案與細節,這將基於你所說的 – daydreamer