【发布时间】:2014-01-25 17:26:32
【问题描述】:
我正在尝试在 AngularJS 中实现一个简单的指令。特别是我想开发一个加载器按钮,在按下时改变其外观,并且我想在我的应用程序的所有需要它的页面中重用它。
我在开发者指南中读到:
"AngularJS 会发出一些特殊的事件。当使用 Angular 的编译器编译的 DOM 节点被销毁时,它会发出 $destroy 事件。同样,当 AngularJS 作用域被销毁时,它会广播 $destroy 事件到监听范围。通过监听这个事件,你可以移除可能导致内存泄漏的事件监听器。注册到范围和元素的监听器在销毁时会自动清理,但是如果你在服务上注册了监听器,或者注册了监听器在没有被删除的 DOM 节点上,您必须自己清理它,否则可能会导致内存泄漏。”
在我的链接函数中,我为事件监听器添加了这段代码:
var onLoaderButtonClickEvent = element.on('click', function(){
//Some stuff
});
现在,我是否将其视为 DOM 元素的侦听器(因此我必须删除它)?我有点困惑。
我认为我不必删除侦听器,因为它位于“元素”上。对吗?
谢谢大家
【问题讨论】:
-
你认为你为什么必须移除监听器?
-
因为我不明白我之前写的文档中提到的“元素”和 DOM 节点之间的区别。我认为像这样的事件: element.on('click', someFunction) 没有被删除,而像这样的事件: $('#somenode').on('click', somefunction) 必须被删除。对吗?
标签: angularjs events dom listener element