Angular JS - 通过$ destroy以全局方式销毁问题清理范围

时间:2015-12-29 16:07:31

标签: angularjs angularjs-directive angularjs-scope

我正在使用angular 1.4.8版本

我的应用程序很复杂,并且有很多指令可以互相嵌套,我希望防止内存泄漏,以防开发人员在创建自定义指令后不自行清理时, 我的目标是确保以全球方式清理范围。

方案: 我有一个多个范围嵌套在彼此之内(其中一些是孤立的),所有这些都在监听角度'$ destroy'事件。

当我为主范围调用$ destroy()时,所有为该主范围成功运行的清理逻辑及其所有子范围$$销毁标志都设置为true,因为这个角度代码:

angular destroyChildScope function

但是如果我想在主要父级被销毁时对所有子范围执行完全销毁,那么我尝试在每个子范围的角度'$ destroty'事件中调用$ destroy()。 问题是:当为子作用域触发事件时,那么$$ destroy标志它已经被设置为true(如前所述)所有子作用域和$ destroy函数逻辑根本没有为子作用域的作用域运行这个有角度的破坏工具:

angular destroy function

  1. 为什么角度范围概念不包含此功能内置?我在角度范围概念中缺少什么?
  2. 实现这一目标的最佳方法是什么?
  3. 寻求最低子范围然后调用destroy()的递归是否足够好解决方案?
  4. 为什么有角度不干净$ parent,$ watches,$ listeners等..对于子范围,我除外,但只为主父范围做?
  5. 我阅读了一些教程,其中指示angular将范围链与范围层次结构断开,并使其符合销毁函数逻辑的GC条件, 但实际上我在某些情况下会遇到子范围仍然通过其'$ parent'属性或ChildScope函数的原型引用被破坏的父范围,这会阻止它被GC清除。

    可能是什么原因?

    提前谢谢你......

0 个答案:

没有答案