AngularJS中的对象比较

时间:2016-03-05 13:45:11

标签: javascript angularjs

我有一个表单,在加载时向服务器发送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);
});

所以,如果脏是真的那么我可以知道数据已经被修改但是因为我使用了对象AngularJS将$$ hasKey添加到$scope.local并且因为$scope.dirty总是设置为true。 / p>

那么,有什么方法可以解决这个问题吗?我是AngularJS的新手,所以这可能是一个有趣的问题,但我被卡住了。

2 个答案:

答案 0 :(得分:1)

在比较之前,你可以convert your objectJSON字符串:

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

答案 1 :(得分:0)

我从PHP发送数据,PHP将Number和string视为单独的数据类型。 所以我将这些数字数据转换为字符串,现在它按照需要工作,并且我知道每当我使用<form name='newForm> angularJS创建一个名为scope的新newForm时,我可以为你提供许多属性范围如$dirty, $pristinem $submitted and many more.所以现在我不必自己写这个逻辑