2013-11-21 19 views
-1

問題是這樣的:

$scope.model1 = [1,2,3,4,5,6,7]; 
$scope.model2 = $scope.model1; 

$scope.model2.splice(2, 1); 

<pre>{{model1}}</pre> 
<pre>{{model2}}</pre> 

返回:

[1,2,4,5,6,7] 
[1,2,4,5,6,7] 

極品:

[1,2,3,4,5,6,7] 
[1,2,4,5,6,7] 

請幫助。如果有人解釋爲什麼會發生這種情況,那將會很好嗎?

UPD: 解決方案:到處使用angular.copy($scope.val) 我的代碼是壞:

$scope.$watch('checkedImages', function (newVal) { 
     if (newVal !== undefined && newVal[0] !== undefined) { 
      if ($scope.model.curSupplier === undefined) { 
       $scope.model.curSupplier = newVal[0].supplier_id; 
       $scope.model.curCheckedImages = newVal; 
      } 
      $scope.supplier = newVal[0].supplier_id; 
     } 
    }); 

VS

$scope.$watch('checkedImages', function (newVal) { 
    if (newVal !== undefined && newVal[0] !== undefined) { 
     if ($scope.model.curSupplier === undefined) { 
      $scope.model.curSupplier = angular.copy(newVal[0].supplier_id); 
      $scope.model.curCheckedImages = angular.copy(newVal); 
     } 
     $scope.supplier = angular.copy(newVal[0].supplier_id); 
    } 
}); 
+1

隨處使用'angular.copy'不是一個好主意。有時,當你改變指令中的某個值時(例如,如果你在'ng-model'中使用屬性),你確實希望修改原始對象。 –

回答

2

通過指定一個列表到另一個你簡單地複製參考資料。

這意味着這兩個模型實際上是指同一個列表。因此改變他們中的任何一個都會反映在另一個上。

相反試試這個:

$scope.model2 = angular.copy($scope.model1); 

更新:

$scope.$watch('checkedImages', function (newVal) { 
    if (newVal !== undefined && newVal[0] !== undefined) { 
     var newObj = angular.copy(newVal); 
     if ($scope.model.curSupplier === undefined) { 
      $scope.model.curSupplier = newObj[0].supplier_id; 
      $scope.model.curCheckedImages = newObj; 
     } 
     $scope.supplier = newObj[0].supplier_id; 
    } 
}); 
+0

非常感謝。 –

+0

@EvgeniyTkachenko我已經更新了答案。 – AlwaysALearner

+0

@EvgeniyTkachenko如果你覺得它是正確的,你歡迎接受「V」:) –

1

這取決於你是否想要一個深拷貝淺副本的陣列中的數據。對於深層複製,您可以使用angular.copy,對於淺層單層深度複製,可以使用array.slice()

相關問題