Warum kann Angular Daten nicht databinden, wenn ein Objekt von einem anderen Objekt kopiert wird?

7

Ich habe eine einfache Datei erstellt, um meine Frage zu illustrieren:

Geige

Html:

%Vor%

Javascript:

%Vor%

Wie Sie sehen können, sind die Werte bindend, wenn ich die Eigenschaften manuell festlege. Aber wenn ich ein Objekt überschreibe, passiert nichts. Wie ist das möglich? Und was muss ich tun, wenn ich ein Objekt im Originalzustand wiederherstellen möchte?

Stellen Sie sich vor, ich erstelle ein Backup-Objekt mit var productBackup = angular.copy(product) . Dann nehme ich Änderungen am Originalprodukt vor und entscheide mich später, meine Änderungen abzubrechen. Ich möchte dies mit product = productBackup tun. Aber das geht nicht! Muss ich in diesem Fall alle Eigenschaften manuell so einstellen?

%Vor%     
Martijn 12.06.2013, 11:45
quelle

2 Antworten

22

Wenn Sie angular.copy(source, destination) verwenden, können Sie den gewünschten Effekt erzielen.

aktualisierte Geige

Was passiert, ist, dass angular immer noch die ursprüngliche p -Referenz beobachtet, selbst nachdem Sie die Aufgabe erledigt haben. Wenn Sie angular.copy() verwenden, kopieren Sie die Werte von prod nach p , die eckig korrekt anzeigt.

Ich fragte eine ähnliche Frage nach einer Frage , aber dieses Problem wurde in einem gemeinsamen Dienst behandelt.

    
Mark Coleman 12.06.2013, 11:57
quelle
3

Ich habe noch nie mit AngularJS gearbeitet, aber ich denke, dass hier der Parameter p nicht Ihr einfaches Schlüssel / Wert-Objekt ist, sondern ein komplexeres AngularJS-Objekt. Indem Sie Ihr prod zuweisen, überschreiben Sie es, anstatt bestimmte Teile des Objekts zu ändern.

Vielleicht hilft Ihnen das folgende Code-Snippet:

%Vor%     
Amberlamps 12.06.2013 11:57
quelle

Tags und Links