我想知道更新资源的最佳方法是什么。
best 我的意思是最常见的,可测试的,并且关注AngularJS标准。根据您的经验,您更喜欢什么。
以下是我正在考虑的一些案例。
var $scope.user = User.get({ id: 123 });
// get this object in a view form, change some stuffs, NOT all of them
$scope.doUpdate = function() {
$scope.user.$update();
}
var $scope.user = User.get({ id: 123 });
var $scope.userCopy = angular.copy($scope.user);
// get this object in a view form, change some stuffs, NOT all of them
$scope.doUpdate = function() {
$scope.userCopy.$update();
}
$scope.user
var,如果它在视图中的其他位置使用或作为依赖注入;如果需要,也可以将$scope.userCopy
还原为$scope.user
。$scope.user
不会反映变化。var user = User.get({ id: 123 });
var $scope.userCopy = angular.copy(user);
// get this object in a view form, change some stuffs, NOT all of them
$scope.doUpdate = function() {
var userChanged = new User();
userChanged.id = user.id;
if ($scope.userCopy.name !== user.name) {
userChanged.name = $scope.userCopy.name;
}
if ($scope.userCopy.surname !== user.surname) {
userChanged.surname = $scope.userCopy.surname;
}
// and iterate on all the values we are expected to be modified
userChanged.$update();
}
$scope
不会反映变化。答案 0 :(得分:0)
我使用方法3的变体来进行部分更新,肯定Lo-Dash可以提供帮助,我想确保我只删除了udpated字段,仅此而已。
我定义了一个diff函数,用于选择需要发送到服务器的partial:
var diff = function(newVal, oldVal){
return _.omit(newVal , function(value, key){
return angular.equals(oldVal[key] , value);
});
}
在加载表单之前,我有一份当前模型的副本:
var oldVal = angular.copy($scope.user);
然后实际更新将是这样的:
$scope.doUpdate = function(){
var userPartial = diff($scope.user , oldVal);
User.update({id: $scope.user._id} , userPartial);
}
如果用户点击取消按钮,或者在更新过程中出现问题,您可以随时恢复到oldVal。