我有一个后端对象,我从服务器收到并发送到服务器。 我向用户授予更改后端对象的权限。 我想确定后端对象是否已从保存点更改。
我如何识别它?
例如: 我有一个名为
的模块app.controller('PanelCtrl', function($scope, $http) {
$scope.action = "";
$scope.selectedItem = "";
$scope.compoundItem = [];
...
我有对象的复合项数组。 我想知道是否有变化是否在基元中发生了变化以及是否在复合项中......
答案 0 :(得分:9)
编辑:两个场景1)客户端检查(原始帖子)2)服务器检查(根据评论扩展)
不要担心以下步骤的执行情况。如果您这样做,请阅读有关效果here
的更多信息答案是:angular.equals()
,此处描述了类似的方案:Developer Guide / forms (它与验证有关)。在绑定到表单和控件状态部分,我们可以看到脚本(提取):
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);
};
}
我们在这里看到的是我们所需要的。首先复制源状态(在更新函数内)。我们可以随时更改isUchnaged
,同时使用angular.equals()
同时检查Compare objects in Angular
注意:对angular.copy()的注释。我发现,在某些情况下,更好的方法是使用lo-dash .deepClone()
如果(正如Dalorzo所期望的那样)在服务器,持久版本和客户端的比较中很有意思。如果我们想检查某个其他是否已经更改了“实体”,那么这是有道理的。在其他一些交易中
通常有很多技术,但最有效的是版本控制。在持久层上,我们必须引入一些值,每次执行“更新”时都会更改/递增。对于MS SQL Server,它将是 rowversion
,请参阅more here
然后,在任何sucesfull UPDATE操作期间,此版本将被更改,并且我们知道客户端上的数据是陈旧的...服务器上有更新的。
版本摘要:
我们的检查非常简单:
这是我与NHiberante(read more here)
一起使用的标准方法答案 1 :(得分:0)
我的第一个解决方案是使用
$timeout(isDifferent,xtime)
其中:
isDifferent
=是您的自定义函数,用于获取后端对象或识别它何时发生更改。
xtime
= is和整数值(以毫秒为单位),表示函数执行的频率。