カスタム アクションで $resource を使用しています。
myApp.factory('User', [ '$resource', function($resource)
{
return $resource('/QuantumServer/users/:id.json',
{
id : '@id'
},
{
resetPassword :
{
method : 'POST',
url : '/QuantumServer/users/:id/resetPassword.json'
}
});
} ]);
User オブジェクトを問題なく取得できます。問題は、カスタム アクションを呼び出すと、ローカル スコープの User オブジェクトの値がサーバーの応答に置き換えられることです。サーバーの応答が{ success : true }
であるため、これは問題です。これにより、ローカル オブジェクトのすべてのフィールド値が失われます。
$scope.resetPassword = function()
{
$scope.userBeingEdited.$resetPassword(
{}, function(value, responseHeaders)
{
alert('Password reset');
// The value of $scope.userBeingEdited has been replaced with the
// server response - how to stop this from happening?
});
};
RESTful の哲学では、たとえば、リソースへの POST によってそのリソースが (サーバー上で) 更新され、更新されたリソースのコピーが返されると述べられていることを私は知っています。これが AngularJS $resouce.$save の仕組みであることを理解しています。しかし、それは本当にカスタム アクションに適用する必要があるのでしょうか?