先來看代碼:
<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指向了不同的地址,只是兩個地址存儲的值是相同的。這個時候再改變其中一個的值就不會影響另一個了。