0

カスタム アクションで $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 の仕組みであることを理解しています。しかし、それは本当にカスタム アクションに適用する必要があるのでしょうか?

4

1 に答える 1

0

これは、私が認識している 1 つの回避策であり、オブジェクトのコピーが更新されてから破棄されます。これが最も優雅な方法ですか?

$scope.resetPassword = function()
{
    angular.copy($scope.userBeingEdited).$resetPassword(function(value, responseHeaders)
    {
        alert('Password reset');
    });
};
于 2013-11-05T19:51:47.773 に答える