Reputation: 592
I noticed the following code recently in an Angular tutorial...
<div ng-app="myApp" ng-controller="formCtrl">
<form novalidate>
First Name:<br>
<input type="text" ng-model="user.firstName"><br>
Last Name:<br>
<input type="text" ng-model="user.lastName">
<br><br>
<button ng-click="reset()">RESET</button>
</form>
<p>form = {{user}}</p>
<p>master = {{master}}</p>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope) {
$scope.master = {firstName: "John", lastName: "Doe"};
$scope.reset = function() {
$scope.user = angular.copy($scope.master);
};
$scope.reset();
});
</script>
With respect to the line: $scope.user = angular.copy($scope.master);
, could this not have been simplified to: $scope.user = $scope.master;
seeing that $scope.master
is going to be an immutable constant in this case?
Upvotes: 0
Views: 630
Reputation: 190941
When you do =
in JavaScript with objects, you are only assigning the reference, not creating a new object (new reference). angular.copy
creates a new object in this case.
In code terms:
var obj1 = {}, var obj2 = {}
obj1 !== obj2; // true
obj1 = obj2;
obj1 === obj2; // true
obj1 = angular.clone(obj2);
obj1 !== obj2; // true
Upvotes: 3