2015-04-23 47 views
2

我採用了棱角分明的JS,我有兩個作用域如何將範圍的深層副本複製到不跟蹤原始範圍更改的新副本?

$scope.selected = { 
    ids: [] 
}; 

$scope.copy = { 
    ids: [] 
}; 

當我點擊一個按鈕,我想$scope.copy$scope.selected獲得的元素,所以我做這個

<button ng-click="copy=selected">copy</button> 

這部作品在一部分,但現在每次更改選定的值時,副本的值也會發生變化。 我也試過使用一個函數,但它並沒有解決我的問題。

$scope.copylist = function(selected) { 
    $scope.copy.ids.push(selected.ids.valueOf()); 
} 

如何更新原始作用域中的值時不更新的副本?

回答

4

使用angular.copy應該做的伎倆

<button ng-click="copyScope()">copy</button> 

function copyScope() { 
    $scope.copy = angular.copy($scope.selected); 
} 

代碼說明

HTML

<div ng-app="myApp" ng-controller="myController"> 
    <button ng-click="copyOriginal()">copyOriginal</button> 
    <button ng-click="touchOriginal()">touchOriginal</button> 
    <pre> {{original}} </pre> 
    <pre> {{copy}} </pre> 
</div> 

JS

$scope.original = [1, 2, 3]; 
$scope.copy = []; 

$scope.touchOriginal = function() { 
    $scope.original.push(4); 
}; 

$scope.copyOriginal = function() { 
    $scope.copy = angular.copy($scope.original); 
    console.log($scope.copy); 
} 

$scope.$watch('copy', function (newCopy, oldCopy) { 
    // Nothing should happen here when you trigger `touchOriginal()` 
    console.log(newCopy, oldCopy); 
}); 

JSFIDDLE

+0

肯定。這是一個很好的解決方案。 –