$ resource自定义操作用服务器响应替换我的Scoped变量

时间:2013-11-05 19:50:13

标签: angularjs angularjs-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对象的值将被服务器响应替换。这是一个问题,因为服务器响应是{ 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有效。但它必须真的适用于我的自定义操作吗?

1 个答案:

答案 0 :(得分:0)

这是我所知道的一种解决方法,它会导致更新对象的副本,然后我们将其丢弃。这是最优雅的方式吗?

$scope.resetPassword = function()
{
    angular.copy($scope.userBeingEdited).$resetPassword(function(value, responseHeaders)
    {
        alert('Password reset');
    });
};