快速“Un-angularize”JS对象的方法

时间:2013-05-14 15:47:57

标签: javascript angularjs

当使用双向绑定时,Angular会将expando属性,“哈希”等添加到我的深层对象结构中。这没关系,但我有兴趣检索我的对象树的JSON快照,只有原来属于那里的东西。 Angular是否提供了获取绑定对象的“vanilla”版本的方法?

(我不想仅仅在绑定之前存储“原始值”,因为我想反映通过UI进行的任何更改。)

1 个答案:

答案 0 :(得分:6)

简短回答:

有一个很好的内置功能:

angular.toJson(yourObj);

更长的解释:

angular.toJson和JSON.stringify之间的唯一区别在于它通过过滤器运行它,该过滤器去掉哈希/ ids并将窗口,文档和范围转换为字符串。如果你想推出自己的函数来执行此操作:这里是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';
}

注意: isWindowisScope函数未导出,因此您需要更多的黑客才能使该函数以完全相同的方式工作。< / p>

来源:http://docs.angularjs.org/api/angular.toJsonhttps://github.com/angular/angular.js/blob/master/src/Angular.js

还有一个angular.fromJSon函数,基本上是JSON.parse

更新值得注意的是,当您为$ http请求指定模型为data时,$ http服务会自动为您执行此操作。