以下是来自 Angular 的文档。我正在观察属于此范围的几个变量,以构建过滤字符串ng-grid
。当这个作用域被销毁时,我是否需要通过调用返回值来取消监视它们$scope.$watch
,或者范围的破坏足以解决这个问题吗?如果正在监视的变量不属于此范围怎么办?
如果我不“取消监视”与作用域一起被破坏的变量,我会泄漏内存/导致性能问题吗?
$destroy()
从父作用域中删除当前作用域(及其所有子作用域)。删除意味着调用$digest()
将不再传播到当前作用域及其子作用域。删除还意味着当前作用域符合垃圾回收条件。
The $destroy()
通常由诸如以下的指令使用ngRepeat
用于管理循环的展开。
就在范围被销毁之前,$destroy
事件在此范围内广播。应用程序代码可以注册一个$destroy
事件处理程序将使它有机会执行任何必要的清理。
请注意,在 AngularJS 中,还有一个$destroy
jQuery 事件,可用于在从 DOM 中删除元素之前清理 DOM 绑定。
快速浏览一下源代码就会发现,删除函数返回的是$watch
不做任何异国情调的事情。它只是从列表中删除一个项目scope.$$watchers
array.
因此,一旦作用域被销毁,整个数组就会随之消失,垃圾收集器将为您清理所有内容。
无论您在观看什么,手表本身都会存储在示波器中。这就是为什么,为了使用$watch
,你不打电话angular.$watch
,而是你打电话$scope.$watch
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)