javascript - 每个控制器中的事件监听器
问题描述
我有一个使用 Angular 1.7 和 ui-router 的 Angular 应用程序。在我的 index.html 中,我有document.addEventListener('keyup',onKeyupVT)
- 事件永远不需要删除。在每个控制器中,我也有 onkeyup 事件(document.addEventListener('keyup',onKeyup)
)。我在 index.html 中有一个按钮(不在控制器中)。如果按钮切换,我将在控制器中添加或删除 onkeyup 事件(而不是在 index.html 中)。
我尝试$rootScope.on('Event' + n, function(e,data){ //... })
在每个控制器中并调用$rootScope.emit('Event' + n,data)
. 它可以工作,但我需要在每个控制器中编写它。所以我该怎么做。谢谢您的帮助
解决方案
如果控制器添加了文档范围的事件侦听器,则需要在销毁控制器时移除该侦听器。
app.controller("ctrl", function($document) {
$document.on("keyup",onKeyup);
function onKeyup(ev) {
console.log(ev);
}
//REMOVE event listeners
this.$onDestroy = function () {
$document.off("keyup",onKeyup);
};
})
这是防止内存泄漏和其他意外行为所必需的。
推荐阅读
- laravel - 查询返回一个对象而不是数组
- android - Kotlin 协程:为什么我直到最后都看不到日志?
- ssl - 没有为“listen ... ssl”指令定义“ssl_certificate”
- assembly - NASM x86 Assembly 中的删除空格问题
- java - 如何在 Windows 上运行生产者和消费者控制台
- php - declare(strict_types=1) 是否适用于包含的文件?
- confluence - 在 Confluence 中创建具有唯一增量 ID 的页面
- php - 如何在用户帐户中显示订单,Laravel
- java - 没有定义类或注解的 JAXB
- javascript - Javascript 触摸事件没有被触发