0

我正面临着angular JS中对象属性更改的问题。例如我有一个对象数组。如何限制使用相同数据的多个变量中变量的数据更改

$scope.ex1 = [{"name":"Ethel Price","gender":"female","company":"Enersol"}, 
{"name":"Claudine Neal","gender":"female","company":"Sealoud"}, 
{"name":"Beryl Rice","gender":"female","company":"Velity"}, 
{"name":"Wilder Gonzales","gender":"male","company":"Geekko"}, 
{"name":"Georgina Schultz","gender":"female","company":"Suretech"}, 
{"name":"Carroll Buchanan","gender":"male","company":"Ecosys"}, 
{"name":"Valarie Atkinson","gender":"female","company":"Hopeli"}, 
{"name":"Schroeder Mathews","gender":"male","company":"Polarium"}, 
{"name":"Lynda Mendoza","gender":"female","company":"Dogspa"}, 
{"name":"Sarah Massey","gender":"female","company":"Bisba"}] 

我有一个窗体,其中我以列表格式显示数据以显示它使用的是angular-datatable。

当用户点击列表项时,我将这个特定对象存储在一个数组中。 例如用户选择从上述列表中的两个项正在保持两个对象在其它变量如下面

$scope.selected = [{"name":"Lynda Mendoza","gender":"female","company":"Dogspa"}, 
{"name":"Sarah Massey","gender":"female","company":"Bisba"}]; 

问题是,当我在$scope.selected的变化改变一些特性在$scope.ex1对象自动反映。 就像下面一样。

$scope.selected[0].name = "Rakesh rekala" 

上述更改将反映在$scope.ex1数组中,该特定项目。

如何限制这种情况有什么办法来解决这个问题。

回答

1

JavaScript对象是可变的,使用angular.copy深复制源对象数组变量中,然后使用该变量将异物塞入选定阵列

+0

有任何方法,使JavaScript对象不可变的,如使用不可变JS或角的任何其他合适的选择。 –

0

你应该改变你的push线。

$scope.selected.push($scope.ex1[0]); 
$scope.selected[0].name = "Test"; //ex1 will change 

$scope.selected.push(angular.copy($scope.ex1[1])); 
$scope.selected[1].name = "Test2"; //It's ok! 

http://jsfiddle.net/ms403Ly8/124/

+0

它工作正常,甚至@ shintu-joseph点也指的是相同的,因为Javascript对象是可变的。 –

相关问题