Angular は、双方向バインディングが使用されている場合、expando プロパティ、「ハッシュ」などを深いオブジェクト構造に追加します。それは問題ありませんが、オブジェクト ツリーの JSON スナップショットを取得して、元々そこに属していたものだけを取得したいと考えています。Angular は、バインドされたオブジェクトの「バニラ」バージョンを取得する方法を提供しますか?
(UI を介して行われた変更を反映したいので、バインドが開始される前に単に「元の値」を保存したくありません。)
Angular は、双方向バインディングが使用されている場合、expando プロパティ、「ハッシュ」などを深いオブジェクト構造に追加します。それは問題ありませんが、オブジェクト ツリーの JSON スナップショットを取得して、元々そこに属していたものだけを取得したいと考えています。Angular は、バインドされたオブジェクトの「バニラ」バージョンを取得する方法を提供しますか?
(UI を介して行われた変更を反映したいので、バインドが開始される前に単に「元の値」を保存したくありません。)
簡潔な答え:
素敵な組み込み関数があります:
angular.toJson(yourObj);
より長い説明:
angular.toJson と JSON.stringify の唯一の違いは、ハッシュ/ID を取り除き、ウィンドウ、ドキュメント、およびスコープを文字列に変換するフィルターを介して実行されることです。これを行うために独自の関数をロールする場合: Angular.JS ソース コードからの関連するスニペットを次に示します。
if(/^\$+/.test(key)) {
val = undefined;
} else if (isWindow(value)) {
val = '$WINDOW';
} else if (value && document === value) {
val = '$DOCUMENT';
} else if (isScope(value)) {
val = '$SCOPE';
}
注:isWindow
および関数はエクスポートされないため、isScope
その関数をまったく同じように機能させるには、もう少しハッキングする必要があります。
ソース: http://docs.angularjs.org/api/angular.toJsonおよびhttps://github.com/angular/angular.js/blob/master/src/Angular.js
angular.fromJSon
本質的にある機能もありますJSON.parse
。
更新$http サービスは、モデルをdata
$http リクエストの として指定すると、これを自動的に行うことに注意してください。