使用 Angular $resource 时如何将对象包裹在我的数据周围
How to wrap an object around my data when using Angular $resource
我有一个简单的 angular 服务,returns 一个 $resource
。假设它看起来像这样:
$resource '/users/:id/:options.json', {id: '@id', options: '@options'},
create_user: {
method: 'POST'
}
现在在我的控制器中,我通过创建用户服务的新实例来使用此资源:
user = new UserService()
user.name = $scope.user.name
user.email = $scope.user.email
user.password = $scope.user.password
user.password_confirmation = $scope.user.password_confirmation
user.$create_user()
但是当执行到最后一行时,数据发送了但是不在对象中。
现在我让 Devise 管理我的用户帐户并查看他们的注册控制器,他们似乎希望我将数据发送到一个名为:sign_up
.
的对象中
我如何在 $resource
中描述我希望我的数据封装在我的自定义对象中?
编辑:这是服务器得到的。它对此不满意并说每个值都丢失了。
Parameters: {"name"=>"foo", "email"=>"foo@bar.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "registration"=>{"name"=>"foo", "email"=>"foo@bar.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}
EDIT2:使用 .erb
注册的工作服务器日志:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xMEDtMWf72yuTwbkaq21c0ZKynoBSWnSypXfm+xJYvNph1d4iKqLIBwwe0DSA3I/YCU+pAHDd23ylc4y7ximEQ==", "user"=>{"name"=>"lol", "email"=>"lol@lol.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
这应该有效:
var User = $resource(
'/users/:id/:options.json', {id: '@id', options: '@options'},
create_user: {
method: 'POST'
}
);
User.create_user({user: $scope.user});
我建议在该路线上使用 transformRequest。您的代码看起来像这样。
$resource('/users/:id/:options.json',
{id: '@id', options: '@options'},
{
create_user: {
method: 'POST',
transformRequest: function(data, headers) {
return angular.toJson({
user: data
});
}
}
});
这允许您更改发送的数据。传递给 transformRequest 的数据 object 是您的用户 object。 headers 已经包含 Content-Type application/json,因此您无需在此处添加。
我有一个简单的 angular 服务,returns 一个 $resource
。假设它看起来像这样:
$resource '/users/:id/:options.json', {id: '@id', options: '@options'},
create_user: {
method: 'POST'
}
现在在我的控制器中,我通过创建用户服务的新实例来使用此资源:
user = new UserService()
user.name = $scope.user.name
user.email = $scope.user.email
user.password = $scope.user.password
user.password_confirmation = $scope.user.password_confirmation
user.$create_user()
但是当执行到最后一行时,数据发送了但是不在对象中。
现在我让 Devise 管理我的用户帐户并查看他们的注册控制器,他们似乎希望我将数据发送到一个名为:sign_up
.
我如何在 $resource
中描述我希望我的数据封装在我的自定义对象中?
编辑:这是服务器得到的。它对此不满意并说每个值都丢失了。
Parameters: {"name"=>"foo", "email"=>"foo@bar.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "registration"=>{"name"=>"foo", "email"=>"foo@bar.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}
EDIT2:使用 .erb
注册的工作服务器日志:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xMEDtMWf72yuTwbkaq21c0ZKynoBSWnSypXfm+xJYvNph1d4iKqLIBwwe0DSA3I/YCU+pAHDd23ylc4y7ximEQ==", "user"=>{"name"=>"lol", "email"=>"lol@lol.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
这应该有效:
var User = $resource(
'/users/:id/:options.json', {id: '@id', options: '@options'},
create_user: {
method: 'POST'
}
);
User.create_user({user: $scope.user});
我建议在该路线上使用 transformRequest。您的代码看起来像这样。
$resource('/users/:id/:options.json',
{id: '@id', options: '@options'},
{
create_user: {
method: 'POST',
transformRequest: function(data, headers) {
return angular.toJson({
user: data
});
}
}
});
这允许您更改发送的数据。传递给 transformRequest 的数据 object 是您的用户 object。 headers 已经包含 Content-Type application/json,因此您无需在此处添加。