当范围被销毁时,我是否需要"监视"范围变量?

boa*_*der 11 angularjs angularjs-watch

以下是角度的文档.我正在观察几个变量,这些变量是构建过滤字符串的范围的一部分ng-grid.当这个范围被销毁时,我是否需要通过调用返回值来取消监视它们$scope.$watch,或者是否足以破坏范围?如果被监视的变量不属于此范围,该怎么办?

如果我没有"监视"与范围一起被销毁的变量,我是否会泄漏内存/导致性能问题.


$destroy()

从父作用域中删除当前作用域(及其所有子作用域).删除意味着调用$digest()将不再传播到当前范围及其子项.删除还意味着当前范围符合垃圾收集的条件.

$destroy()通常使用的指令,如ngRepeat用于管理环的展开.

在销毁范围之前,$destroy会在此范围内广播一个事件.应用程序代码可以注册一个$destroy事件处理程序,使其有机会执行任何必要的清理.

请注意,在AngularJS中,还有一个$destroyjQuery事件,可以在从DOM中删除元素之前清除DOM绑定.

Noi*_*she 18

快速查看源代码将向您显示返回的删除函数$watch没有做任何异国情调.它只是从scope.$$watchers数组中删除一个项目.

因此,一旦范围被销毁,整个阵列就会随之而来,垃圾收集器将为您清理所有内容.

无论您正在观看什么,手表本身都存储在示波器中.这就是为什么,为了使用$watch,你不打电话angular.$watch,而是你打电话$scope.$watch.