角度js中的识别对象已更改

Avi*_*ade 4 javascript jquery onchange angularjs

我有一个后端对象,我从服务器收到并发送到服务器.我向用户授予更改后端对象的权限.我想确定后端对象是否已从保存点更改.

我怎么识别它?

例如:我有一个名为的模块

app.controller('PanelCtrl', function($scope, $http) {
$scope.action = "";
$scope.selectedItem = "";
    $scope.compoundItem = [];

...
Run Code Online (Sandbox Code Playgroud)

我有对象的复合项数组.我想知道是否有变化是否在基元中发生了变化以及是否在复合项中...

Rad*_*ler 9

编辑:两个场景1)客户端检查(原始帖子)2)服务器检查(根据评论扩展)

1)检查客户端

不要担心以下步骤的执行情况.如果您这样做,请在此处阅读有关性能的更多信息

答案是:angular.equals()此处描述了类似的场景: 开发人员指南/表单 (它与验证有关).在Binding to form和control状态一节中,我们可以看到脚本(提取):

function Controller($scope) {
  $scope.master = {};

  $scope.update = function(user) {
    $scope.master = angular.copy(user);
  };

  $scope.reset = function() {
    $scope.user = angular.copy($scope.master);
  };

  $scope.isUnchanged = function(user) {
    return angular.equals(user, $scope.master);
  };
}
Run Code Online (Sandbox Code Playgroud)

我们在这里看到的是我们所需要的.首先复制源状态(在更新函数内).我们可以随时改变isUchnaged,同时使用angular.equals()

还要检查Angular中的比较对象

注意:对angular.copy()的注释.我发现,在某些情况下,更好的是使用lo-dash .deepClone()

2)服务器端解决方案

如果(如Dalorzo所期望的那样)在服务器,持久版本和客户端的比较中很有意思.如果我们想检查其他人是否已经改变了"实体" ,那么这是有道理的.在其他一些交易中

通常有很多技术,但最有效的是版本控制.在持久层上,我们必须引入一些值,每次执行"更新"时都会更改/递增.在MS SQL Server的情况下,它将是rowversion,在这里看到更多

然后,在任何sucesfull UPDATE操作期间,此版本将被更改,并且我们知道客户端上的数据是陈旧的......服务器上有更新的版本.

版本摘要:

我们的检查非常简单:

  • 比较Client(current)Version属性和
  • 向服务器询问最新的持久性.

这是我与NHiberante一起使用的标准方法(在这里阅读更多)