2015-04-27 10 views
6

ho qualcosa di simile a questo:angolare - salvare il valore portata alla variabile, ma non aggiornarlo quando portata aggiorna

$scope.last_good_configuration = $scope.storage; 

In $ scope.last_good_configuration io continuo ultimi buoni impostazioni.

E quando tipo di utente in ingresso un pessimo affare, ad esempio troppo grande numero intero che voglio fare:

$scope.storage = $scope.last_good_configuration; 

Ma il mio $ scope.last_good_configuration è tutto il tempo la stessa da $ scope.storage. Come smettere di aggiornare $ scope.last_good_configuration? Devo valutare il mio scopo in qualche modo?

+0

ci sono informazioni mancanti per aiutarvi ... – n00dl3

risposta

5

Hai bisogno di fare una copia o clone dell'oggetto originale. Angular ha un metodo integrato per questo: angular.copy.

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


//Edits must be at least 6 characters workaround 
2

Dato che gli oggetti vengono passati per riferimento, è necessario creare un oggetto nuova alla configurazione archivio predefinito in. In caso contrario, quando si modificano $scope.last_good_configuration colpisce anche $scope.storage poiché entrambi puntano allo stesso oggetto.

Usa angular.extend metodo che copierà tutti oggetti di $scope.storage nel nuovo oggetto {}:

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

UPD. Mi sono completamente dimenticato di dedicato angular.copy che è probabilmente più appropriato in questo caso, in particolare è $scope.storage ha la struttura ad oggetti nidificati: angualar.extend creerà una copia superficiale, in questo caso dovresti usare angular.copy (vedi risposta Satpal).

4

È possibile creare un nuovo oggetto utilizzando angular.copy() in modo che quando si apportano modifiche al storage non influenzerà last_good_configuration

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