这是我的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', 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
谢谢
答案 0 :(得分: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}
答案 1 :(得分:8)
我建议您对更新声明进行以下更改:
{update: {method: 'PUT', data:{profile:'@profile'}, isArray: false}}
查看此plunker上的网络标签。 -v.1.1.5
以下是稳定version 1.0.7上的相同示例。