2013-05-14 5 views
5

Angular fügt Expando-Eigenschaften, "Hashes" usw. meiner tiefen Objektstruktur hinzu, wenn eine Zweiwege-Bindung verwendet wird. Das ist in Ordnung, aber ich bin daran interessiert, einen JSON-Snapshot meines Objektbaums mit nur den Dingen zu erhalten, die ursprünglich dorthin gehörten. Bietet Angular eine Möglichkeit, eine "Vanilla" -Version eines gebundenen Objekts zu erhalten?Schnelle Möglichkeit, ein JS-Objekt zu "entwinkeln"

(. Ich mag nicht nur speichern, den „ursprünglichen Wert“ vor Tritten in der Bindung, da ich alle Änderungen über die Benutzeroberfläche vorgenommen reflektieren wollen würde)

+0

Können Sie eine Goddemonstration hinzufügen, die zeigt, wie das Objekt schmutzig wird? – Stewie

Antwort

6

kurze Antwort:

Es gibt eine schöne eingebaute Funktion:

angular.toJson(yourObj);

längere Erklärung:

Der einzige Unterschied zwischen angular.toJson und JSON.stringify besteht darin, dass es einen Filter durchläuft, der die Hashes/IDs ausstreift und Fenster, Dokument und Bereich in Zeichenfolgen umwandelt. Wenn Sie Ihre eigene Funktion rollen wollen, dies zu tun: hier ist relevant Schnipsel aus Angularjs Quellcode:

if(/^\$+/.test(key)) { 
    val = undefined; 
} else if (isWindow(value)) { 
    val = '$WINDOW'; 
} else if (value && document === value) { 
    val = '$DOCUMENT'; 
} else if (isScope(value)) { 
    val = '$SCOPE'; 
} 

Anmerkung: die isWindow und isScope Funktionen werden nicht exportiert, so dass Sie ein wenig bräuchten mehr Hacking, damit diese Funktion genau so funktioniert.

Quelle: http://docs.angularjs.org/api/angular.toJson und https://github.com/angular/angular.js/blob/master/src/Angular.js

Es gibt auch eine angular.fromJSon Funktion, die im Wesentlichen JSON.parse ist.

Aktualisieren Es ist erwähnenswert, dass der $ http-Dienst dies automatisch für Sie ausführt, wenn Sie ein Modell als data für eine $ http-Anforderung angeben.

+1

Das war was ich brauchte - vielen Dank! – blaster

Verwandte Themen