以下是角度的文档.我正在观察几个变量,这些变量是构建过滤字符串的范围的一部分ng-grid
.当这个范围被销毁时,我是否需要通过调用返回值来取消监视它们$scope.$watch
,或者是否足以破坏范围?如果被监视的变量不属于此范围,该怎么办?
如果我没有"监视"与范围一起被销毁的变量,我是否会泄漏内存/导致性能问题.
$destroy()
从父作用域中删除当前作用域(及其所有子作用域).删除意味着调用$digest()
将不再传播到当前范围及其子项.删除还意味着当前范围符合垃圾收集的条件.
在$destroy()
通常使用的指令,如ngRepeat
用于管理环的展开.
在销毁范围之前,$destroy
会在此范围内广播一个事件.应用程序代码可以注册一个$destroy
事件处理程序,使其有机会执行任何必要的清理.
请注意,在AngularJS中,还有一个$destroy
jQuery事件,可以在从DOM中删除元素之前清除DOM绑定.
快速查看源代码将向您显示返回的删除函数$watch
没有做任何异国情调.它只是从scope.$$watchers
数组中删除一个项目.
因此,一旦范围被销毁,整个阵列就会随之而来,垃圾收集器将为您清理所有内容.
无论您正在观看什么,手表本身都存储在示波器中.这就是为什么,为了使用$watch
,你不打电话angular.$watch
,而是你打电话$scope.$watch
.