我有一个表单,加载时会向服务器发送 GET 请求并接收将存储在“master”中的数据,然后我将该数据复制到“local”,如下所示。
$scope.dirty = false;
init(data);
function init(data) {
$scope.master = angular.copy(data.data);
$scope.local = angular.copy($scope.master);
}
现在,我使用本地对象作为表单的模型,并且必须单击“提交”和“重置”按钮。我观察本地对象如下。
$scope.$watchCollection('local', function (newLocal, oldLocal) {
$scope.dirty = !angular.equals(newLocal, $scope.master);
});
所以,如果 dirty 为真,那么我可以知道数据已被修改,但由于我使用对象 AngularJS 将 $$hasKey 添加到 $scope.local
,因此 $scope .dirty
始终设置为 true。
那么,有什么办法可以解决这个问题吗?我是 AngularJS 的新手,所以这可能是一个有趣的问题,但我被困住了。
最佳答案
你可以convert your object比较之前转换为 JSON
字符串:
function init(data) {
// store json data into $scope.master for later comparison
$scope.master = angular.toJson(data.data);
$scope.local = angular.copy(data.data);
}
$scope.$watchCollection('local', function (newLocal, oldLocal) {
var json = angular.toJson(newLocal); // new local without $$ key
$scope.status.dirty = !angular.equals(json, $scope.master);
// $scope.local is still a javascript object
});
关于javascript - AngularJS 中的对象比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35814902/