官方AngularJS UI Bootstrap $ modal样本中的内存泄漏?

时间:2014-10-16 21:23:22

标签: javascript angularjs memory-leaks angular-ui-bootstrap

我正在尝试了解如何避免AngularJS中的内存泄漏。似乎几乎没有关于清理什么的文档,正如人们所预料的那样,垃圾收集是完美无缺的。但是,我的阅读表明,保留绑定的DOM元素很容易防止垃圾收集,StackOverflow answer表示我们必须手动取消绑定指令中设置的任何绑定,并且规模较小,clean up $timeouts as well。我遇到了this article,它指示我寻找“分离的”DOM元素。

仅使用sample $modal code from the AngularJS UI site,在打开和关闭模态对话框后,我发现了许多相当大的分离元素。它似乎不会随着重复点击而增长,但如果我有很多对话框,每个对话框都会看起来永远。我尝试在关闭后设置modalInstance = null但是没有完成任何事情。

分离的元素真的很糟糕吗?如果是这样,应该如何修改AngularJS UI sample modal code以消除这些?

更重要的是,在使用AngularJS时,是否有任何简单明了的说明?很高兴他们提供$ on。$ destroy功能,但我找不到任何明确的说明,说明我负责清理或如何操作。

2 个答案:

答案 0 :(得分:0)

我担心分离的元素是更复杂的问题,导致不受控制的内存泄漏。我研究了一种为我解决这个问题的方法。这就是可以通过自定义$ modal工厂更改本机ui.bootstrap模式行为,该工厂可以防止破坏和重新实例化对话框。所以$ modal对话框变成了单例。

我已经在github上分享了我对此解决方案的尝试:https://github.com/dhilt/angular-bootstrap-modal-singleton。我在我工作的项目中使用它。

答案 1 :(得分:0)

这是来自angular-ui的bug

  

这是由于我们重新使用模态范围。每次范围都是   重新使用并附加在不同的元素上,观察者被添加到   范围

这里是fix