2016-06-20 7 views
0

Ich habe einen Controller, wo ich einige Daten auf meiner Seite aktualisiert werden, aber ich habe ein Problem mit den Daten, die in meinem Controller injiziert wird.Daten auf Variable nur einmal gespeichert

Grundsätzlich werden die Daten, die in meinem Controller injiziert wird immer in Echtzeit aktualisiert, aber ich brauche die ersten Daten in der Seite gespeichert in einer Variablen gespeichert und nicht geändert werden, aber aus irgendeinem Grund wird es aktualisiert. Mein Code

:

vm.storedData = null; 

function activate() { 
    if(vm.storedData == null){ 
     vm.storedData = data.condition_lines; 
    } 
} 

activate(); 

Mache ich etwas falsch?

+0

Der Grund ist ganz einfach, wenn Sie das tun "=" zum Beispiel in Code vm.storedData = data.condition_lines; Sie erstellen eine neue Variable, die im Grunde nur ein Zeiger auf eine "data.contidion_lines" ist, so dass alle Änderungen an data.condition_lines in vm.storedData widerspiegeln. – encore

Antwort

1

Ich glaube, dies durch die Art und Weise verursacht wird, Objekte Javascript speichert.

data ist ein Objekt. data speichert condition_lines nicht, es speichert einen Verweis auf condition_lines, daher bewirkt die Einstellung vm.storedData = data.condition_lines; eine Zuweisung durch Referenz. Als Ergebnis wird vm.storedData IMMER mit data.condition_lines gleichgesetzt.

Sie könnten angular.copy() verwenden, um effektiv nach Wert zu bestimmen (es macht komplexere Dinge unter der Haube, aber die Ergebnisse sind die gleichen).

vm.storedData = angular.copy(data.condition_lines);

0

Es sieht so aus, als hätten Sie eine Referenzvariable (vm.storedData) auf ein anderes Objekt gerichtet, und da sich der Wert von data.condition_lines immer noch ändert, ändert sich auch die storedData.

Wenn Sie den Inhalt der condition_lines auf die storedData kopieren, sollten Sie erhalten, was Sie wollen.

Sie könnten dies wollen: https://docs.angularjs.org/api/ng/function/angular.copy