角度资源PUT响应丢失

时间:2014-11-13 05:04:36

标签: javascript angularjs

如何获得角度来保留对PUT的响应中返回的数据更新?

我有一个基本的角度(vsn 1.2.26)RESTful应用程序,可成功检索,更新数据并将数据写回服务器。服务器改变更新记录的“updateTime”字段,并在(200)对浏览器的响应中返回它。我可以在$ resource.save回调函数中看到更新的值,但我无法想象如何在回调期间将其持久化到$ scope以使其在UI中可见。

angular.module('myResources',['ngResource'])
    .factory('Fund',['$resource',function($resource)
        {
        return $resource('http://myhost/xyz/fund/:id'
                        ,{ id: '@guid' }
                        ,{ save: { method: 'PUT' }
                          ,query: {method: 'GET', isArray: false }
                         }
                        );
        }])
...
$scope.selectRecord = function(R)
    {
    ...
    $scope.record = R;
    }

$scope.saveRecordChanges = function()
    {
    ...
    myFundResource.save($scope.record,function(response){
        $scope.record = angular.fromJson(response); // gets refreshed data but doesn't update UI
        console.log("new updateTime=" + $scope.record.updateTime); // correctly displays new value in the log
        });
    }

2 个答案:

答案 0 :(得分:0)

您可以将其添加到保存回调函数中:

$scope.$apply();

或者您可以将功能更改为:

$scope.saveRecordChanges= function(){
    myFundResponse.save($scope.record).$promise.then(function(response){
        $scope.record = response;
    });
};

Cuz在angular $ promise中,它会调用$ asyncEval来调用你的成功或错误回调,这意味着使用angular $ promise会自动更新视图。

答案 1 :(得分:0)

我的错误是我希望更新ng-repeat记录列表 - 但我没有更新列表,只是将$ scope.record(当前记录)指针重定向到新对象。我添加了代码来更新记录列表:

myFundResource.save($scope.record,function(response)
    {
    var vIdx = $scope.allRecords.indexOf($scope.record); // allRecords is bound to the UI table via ng-repeat
    $scope.record = response;  // ** $scope.record no longer points to the same object as $scope.allRecords[vIdx] - array is unaware of this change
    $scope.allRecords[vIdx] = $scope.record; // replace array element with new object
    });

感谢@ Tyler.z.yang提供的见解和问题,让我思考正确的方向。