【问题标题】:Angular JS: angular.copy crashes the browser when an object references another objectAngular JS:当一个对象引用另一个对象时,angular.copy 会使浏览器崩溃
【发布时间】:2013-05-09 13:52:24
【问题描述】:

我有以下 JavaScript/Angular 代码:

var a = {};
var b = {};
a.ref = b;
b.ref = a;
angular.copy(a);

angular.copy 触发时,浏览器会锁定。我假设这是因为复制函数正在进行深度复制,当它开始复制 a 对 b 的引用时,它进入 b 然后想要复制其对 a 的引用,从而创建一个循环复制,它永远不会结束。

这个假设正确吗?如果是这样,有没有办法避免这种情况?我假设答案将涉及改变我的数据的外观,但我很想听听其他人的想法。

【问题讨论】:

    标签: angularjs deep-copy


    【解决方案1】:

    你的假设是正确的,问题是循环引用。 JSON.stringify 也会抱怨这种结构。 jQuery.extend 在非常基本的级别检测循环引用,并且可以在此处处理您的基本示例,但 jQuery.extend has its own issues as well。如果你已经在使用 jQuery,你可以只使用 extend,否则你可能想自己写一些东西,或者你可以使用我通过谷歌找到的这个花哨的 cloneObject 函数:

    https://gist.github.com/NV/1396086

    【讨论】:

    • 有趣。感谢您澄清我的假设。听起来我的数据结构应该改变......
    • 你是这样解决的吗?您是否能够使用循环引用使其工作?
    • 我们通过重新设计数据模型来修复它。我们没有给子节点实际的父对象,而是为每个子节点添加了一个子节点和父节点 ID……所以当我们创建孙子时,很容易传递其父节点的 ID。
    【解决方案2】:

    _.cloneDeep 处理循环引用。 http://lodash.com/

    【讨论】:

      猜你喜欢
      • 2022-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 2013-02-18
      • 2012-11-25
      • 1970-01-01
      • 2012-05-06
      相关资源
      最近更新 更多