2016-03-05 4 views
1

У меня есть форма, которая при загрузке отправляет запрос GET на сервер и возвращает данные, которые будут храниться в «master», и я копирую эти данные в «local», как показано ниже.Сравнение объектов в AngularJS

$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 всегда устанавливает истину.

Итак, есть ли способ справиться с этой проблемой? Я новичок в AngularJS, поэтому может быть, это может быть забавный вопрос, но я застрял.

ответ

0

я отправлял форму данных PHP и PHP обрабатывает номер и строку как отдельный тип данных. Итак, я преобразовал эти данные числа в строку, и теперь он работает по своему желанию, а также я стараюсь, что всякий раз, когда я использую <form name='newForm>, angularJS создает новый scope с именем newForm, так что я могу вам много свойств этой области, например $dirty, $pristinem $submitted and many more., так что теперь мне не нужно писать эта логика сама по себе

1

Вы можете 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 
}); 
+0

Если я использую этот код, тогда $ scope.local = angular.copy ($ scope.local) не будет работать. Итак, я должен использовать $ scope.local = angular.copy (data.data) правильно? – nextt1

+0

как это так? вы могли бы ввести другую переменную? – cl3m

+0

Выше код не работает. – nextt1

Смежные вопросы