我正在使用angular 1.4.8版本
我的应用程序很复杂,并且有很多指令可以互相嵌套,我希望防止内存泄漏,以防开发人员在创建自定义指令后不自行清理时, 我的目标是确保以全球方式清理范围。
方案: 我有一个多个范围嵌套在彼此之内(其中一些是孤立的),所有这些都在监听角度'$ destroy'事件。
当我为主范围调用$ destroy()时,所有为该主范围成功运行的清理逻辑及其所有子范围$$销毁标志都设置为true,因为这个角度代码:
angular destroyChildScope function
但是如果我想在主要父级被销毁时对所有子范围执行完全销毁,那么我尝试在每个子范围的角度'$ destroty'事件中调用$ destroy()。 问题是:当为子作用域触发事件时,那么$$ destroy标志它已经被设置为true(如前所述)所有子作用域和$ destroy函数逻辑根本没有为子作用域的作用域运行这个有角度的破坏工具:
我阅读了一些教程,其中指示angular将范围链与范围层次结构断开,并使其符合销毁函数逻辑的GC条件, 但实际上我在某些情况下会遇到子范围仍然通过其'$ parent'属性或ChildScope函数的原型引用被破坏的父范围,这会阻止它被GC清除。
可能是什么原因?
提前谢谢你......