Blejwi
Blejwi

Reputation: 1025

Angular - save scope value to variable, but not update it when scope updates

I have something like this:

$scope.last_good_configuration = $scope.storage;

In $scope.last_good_configuration I keep last good settings.

And when user type in input bad value, for example too big integer i want to do:

$scope.storage = $scope.last_good_configuration;

But my $scope.last_good_configuration is all the time the same as $scope.storage. How to stop updating $scope.last_good_configuration? I have to evaluate my scope somehow?

Upvotes: 7

Views: 4240

Answers (3)

Satpal
Satpal

Reputation: 133403

You can create a new object using angular.copy() so when you make changes to storage it won't affect last_good_configuration

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

Upvotes: 4

Chris Charles
Chris Charles

Reputation: 4446

You need to make a copy or clone of the original object. Angular has a built in method for this: angular.copy.

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


//Edits must be at least 6 characters workaround

Upvotes: 6

dfsq
dfsq

Reputation: 193261

Since objects are passed by reference, you need to create a new object to store default configuration in. Otherwise, when you modify $scope.last_good_configuration it also affects $scope.storage since they both point to the same object.

Use angular.extend method which will copy all properties from $scope.storage into the new object {}:

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

UPD. I totally forgot about dedicated angular.copy which is probably more appropriate in this case, especially is $scope.storage has nested object structure: angualar.extend will make a shallow copy, in this case you should use angular.copy (see Satpal answer).

Upvotes: 2

Related Questions