Javascript AngularJS:更新资源的正确方法是什么

Javascript AngularJS:更新资源的正确方法是什么,javascript,angularjs,ngresource,Javascript,Angularjs,Ngresource,我想知道更新资源的最佳方法是什么 我所说的“最佳”是指最常见的可实现、可测试和最关注AngularJS标准的标准。根据你的经验,你更喜欢什么 以下是我正在思考的一些案例 方法1:简单的方法 优点:非常容易写 缺点:如果它有很多属性,并且只修改了一个,那么所有属性都会被重新发送 方法2:复制 优点:保护$scope.uservar(如果它在视图中的其他位置使用或用作依赖项注入);如果需要,还可以将$scope.userCopy还原为$scope.user 缺点:变量重复和$scope。用户不

我想知道更新资源的最佳方法是什么

我所说的“最佳”是指最常见的可实现、可测试和最关注AngularJS标准的标准。根据你的经验,你更喜欢什么

以下是我正在思考的一些案例

方法1:简单的方法
  • 优点:非常容易写
  • 缺点:如果它有很多属性,并且只修改了一个,那么所有属性都会被重新发送
方法2:复制
  • 优点:保护
    $scope.user
    var(如果它在视图中的其他位置使用或用作依赖项注入);如果需要,还可以将
    $scope.userCopy
    还原为
    $scope.user
  • 缺点:变量重复和
    $scope。用户
    不会反映更改
方法3:非常安全的方法
  • 优点:您确切地知道更新的内容
  • 缺点:can意味着大量代码和检查,变量重复,
    $scope
    不会反映更改

我使用方法3的一种变体来进行部分更新,我肯定是在这里提供帮助的,我想确保我只放置了udpated字段,没有其他内容

我定义了一个diff函数,用于选择需要发送到服务器的部分:

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);
}

如果用户点击“取消”按钮,或者更新过程中出现问题,您始终可以恢复到旧值。

不同情况下的不同方法…没有“一刀切”的方法。
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);
}