【发布时间】:2015-01-15 19:33:49
【问题描述】:
https://docs.angularjs.org/guide/directive
通过监听 this($destroy) 事件,您可以移除可能导致内存泄漏的事件监听器。注册到作用域和元素的侦听器在销毁时会自动清理,但是如果您在服务上注册了侦听器,或者在未被删除的 DOM 节点上注册了侦听器,则必须自己清理或您可能会导致内存泄漏。
查看$destroy 的代码,它似乎解除了事件监听器的绑定:
https://github.com/angular/angular.js/blob/d7ecab775ceefcd55a23780d005ce1c39cd8651b/src/ng/rootScope.js#L696
forEach(this.$$listenerCount, bind(null, decrementListenerCount, this));
那么,为什么 Angular.js 文档告诉我在发出 $destroy 事件时手动删除事件侦听器?
【问题讨论】:
-
它告诉你不要销毁监听器,而是销毁 $timeout 或 $intervals 或 $http 等
-
不,它声明
you can remove event listeners。这只是$timeout or $intervals的一个例子。还有比这更多的事件监听器,但他们不需要每个都举一个例子。 -
如果你注册了 $rootScope 观察者的话。阅读 BUT 部分