首页 > 解决方案 > 每个控制器中的事件监听器

问题描述

我有一个使用 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). 它可以工作,但我需要在每个控制器中编写它。所以我该怎么做。谢谢您的帮助

标签: javascriptangularjs

解决方案


如果控制器添加了文档范围的事件侦听器,则需要在销毁控制器时移除该侦听器。

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);
    };
})

这是防止内存泄漏和其他意外行为所必需的。


推荐阅读