如何获得角度来保留对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
});
}
答案 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提供的见解和问题,让我思考正确的方向。