我使用angular.copy
克隆對象,這樣我可以發現變化的對象,像這樣:如何檢測Angular中複製對象的更改?
var app = angular.module('MyApp', []);
app.controller('MyCtrl', function ($scope) {
$scope.obj = {
id: 1,
str: "Hello World"
};
$scope.init = function() {
$scope.objCopy = angular.copy($scope.obj);
}
$scope.hasChanges = false;
$scope.change = function() {
$scope.hasChanges = !($scope.obj == $scope.objCopy);
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="MyApp">
<div ng-controller="MyCtrl" ng-init="init()">
<input type="text" ng-model="objCopy.str" ng-change="change()" />
<pre>obj = {{ obj }}</pre>
<pre>objCopy = {{ objCopy }}</pre>
<pre>hasChanges? {{ hasChanges }}</pre>
</div>
</div>
的問題是,雖然當我添加字符的文本字符串如果我將該字符串編輯回其原始文本,hasChanges
變量仍然顯示爲true
,則檢測到更改。由於字符串相同,我希望它變成false
。他們不是?
如果你只是檢查'str'不會是suffient?你也可以JSON.stringify(obj)並檢查是否相等 – koox00
使用angular.equals(obj1,obj2)而不是obj1 == obj2。 –