每个控制器中的EventListener

时间:2019-06-16 15:09:49

标签: javascript angularjs

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

1 个答案:

答案 0 :(得分:0)

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

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

这是必要的,以防止内存泄漏和其他意外行为。