当使用双向绑定时,Angular 将扩展属性、“哈希”等添加到我的深层对象结构中。这很好,但我有兴趣检索我的对象树的 JSON 快照,其中只包含最初属于那里的东西。Angular 是否提供了一种获取绑定对象的“香草”版本的方法?
(我不想在绑定开始之前只存储“原始值”,因为我想反映通过 UI 所做的任何更改。)
当使用双向绑定时,Angular 将扩展属性、“哈希”等添加到我的深层对象结构中。这很好,但我有兴趣检索我的对象树的 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
and函数不会被isScope
导出,所以你需要更多的修改才能让该函数以完全相同的方式工作。
来源:http ://docs.angularjs.org/api/angular.toJson和https://github.com/angular/angular.js/blob/master/src/Angular.js
还有一个angular.fromJSon
功能本质上是JSON.parse
.
更新值得注意的是,当您data
为 $http 请求指定模型时,$http 服务会自动为您执行此操作。