0

einzuschränken ich bin mit einem Problem mit Objekteigenschaften Änderungen in angular JS konfrontiert.wie Datenänderungen einer Variablen in mehreren Variablen, die die gleichen Daten verwenden,

zum Beispiel habe ich eine Reihe von Objekten.

$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"}] 

Ich habe ein Formular, wo ich die Daten in einem Listenformat anzeigen, um es mit Winkel-Datentabelle anzuzeigen.

wenn Benutzer auf Listenelemente klickt, die dieses bestimmte Objekt in einem Array speichern. zum Beispiel Benutzer ausgewählt zwei Artikel aus der obigen Liste in einer anderen Variablen, dass zwei Objekte wie unter

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

das Problem ist, wenn ich eine Eigenschaft in $scope.selected die Änderungen ändern reflektiere automatisch in $scope.ex1 Objekt am halten. wie unten.

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

Die obige Änderung wird in $scope.ex1 Array zu diesem bestimmten Artikel widerspiegeln.

Wie Sie dieses Szenario einschränken können, gibt es eine Möglichkeit, dies zu lösen.

Antwort

1

Javascript-Objekte sind wandelbar, verwenden angular.copy zu tiefe Kopie einer Variablen Ihre Quellobjekt-Array und dann die Variable verwenden, um Objekte in das ausgewählte Array

+0

ist es eine Möglichkeit, die JavaScript-Objekte unveränderlich zu machen, wie für Winkel unveränderlich JS oder jede andere geeignete Wahl. –

0

Sie Ihre push Linie ändern sollte zu schieben.

$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

es funktioniert gut, und sogar der @ shintu-joseph Punkt bezieht sich auch auf das gleiche, weil Javascript-Objekte veränderbar sind. –

Verwandte Themen