2015-04-27 22 views
6

mam coś takiego:kątowa - zachowaj zakres wartości do zmiennej, ale nie aktualizować go, gdy zakres aktualizuje

$scope.last_good_configuration = $scope.storage; 

w $ scope.last_good_configuration trzymam ostatnie dobre ustawienia.

A gdy typ użytkownika w wejściowym złe wartości, na przykład zbyt duża liczba całkowita chcę zrobić:

$scope.storage = $scope.last_good_configuration; 

Ale moja $ scope.last_good_configuration jest cały czas taka sama jak $ scope.storage. Jak zatrzymać aktualizację $ scope.last_good_configuration? Muszę jakoś ocenić mój zakres?

+0

brakuje nam informacji, które mogą Ci pomóc ... – n00dl3

Odpowiedz

5

Musisz zrobić kopię lub klon oryginalnego obiektu. Angular ma wbudowaną metodę: angular.copy.

$scope.last_good_configuration = angular.copy($scope.storage); 


//Edits must be at least 6 characters workaround 
2

Ponieważ obiekty są przekazywane przez referencję, trzeba stworzyć nowy obiektu do przechowywania domyślnej konfiguracji w. W przeciwnym razie, w przypadku modyfikacji $scope.last_good_configuration to również wpływa $scope.storage ponieważ oba wskazują na ten sam obiekt.

Zastosowanie angular.extend metoda, która będzie skopiować wszystkie właściwości z $scope.storage do nowego obiektu {}:

$scope.last_good_configuration = angular.extend({}, $scope.storage); 

UPD. Całkowicie zapomniałem o dedykowanym angular.copy, który jest prawdopodobnie bardziej odpowiedni w tym przypadku, zwłaszcza, że ​​$scope.storage ma zagnieżdżoną strukturę obiektu: angualar.extend zrobi płytką kopię, w tym przypadku powinieneś użyć angular.copy (patrz odpowiedź Satpal).

4

Można utworzyć nowy obiekt przy angular.copy() więc po wprowadzeniu zmian do storage nie wpłynie last_good_configuration

$scope.last_good_configuration = angular.copy($scope.storage); 
Powiązane problemy