先来看代码:
<b>{{test1}}</b> <input type="text" ng-model="test2" title="test" />
$scope.list = 'band'; $scope.editModi = function(idx){ $scope.editItem = $scope.list; };
这个时候我们在视图中修改editItem的值时,list的值不变。
<b>{{test1.name}}</b> <input type="text" ng-model="test2.name" title="test" />
$scope.test1 = { "id":1, "name":"band" }; $scope.test2 = $scope.test1;
此时在视图中改变test2.name的值时,tes1.name的值也相应的改变了。
<b>{{test1[1]}}</b> <input type="text" ng-model="test2[1]" title="test" />
$scope.test1 = ['11','22','33']; $scope.test2 = $scope.test1;
此时在视图中改变test2[1]的值时,tes1[1]的值也相应的改变了。
解释:当$scope.tes1是基本类型时,$scope.test2 = $scope.test1;赋的是值,因此不会发生改变其中一个的值另一个也发生改变的情况。
当$scope.test1是对象或数组时,$scope.test2 = $scope.test1;此时$scope.test1和$scope.test2共同指向了内存中的某一处,因此当改变其中一个值的时候,另一个值也会跟着改变。
解决方法:angular.copy($scope.test1,$scope.test2);angular.copy做了一份数据的拷贝,此时$scope.test1和$scope.test2指向了不同的地址,只是两个地址存储的值是相同的。这个时候再改变其中一个的值就不会影响另一个了。