Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每个控制器中的EventListener_Javascript_Angularjs - Fatal编程技术网

Javascript 每个控制器中的EventListener

Javascript 每个控制器中的EventListener,javascript,angularjs,Javascript,Angularjs,我有一个Angular应用程序,使用Angular 1.7和ui路由器。在我的index.html中,我有document.addEventListener('keyup',onKeyupVT)-事件不需要删除。在每个控制器中,我也有onkeyup事件(document.addEventListener('keyup',onkeyup))。我在index.html中有一个按钮(不在控制器中)。若按钮切换,我将在控制器中添加或删除onkeyup事件(不在index.html中) 我尝试在每个控制器

我有一个Angular应用程序,使用Angular 1.7和ui路由器。在我的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);
    };
})

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

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

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

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

好信息,在某种程度上是相关的;但是,它并没有完全解决问题和意图。i、 您是否建议O.P.继续在每个控制器中添加EventListener和处理程序?你看,问题更多的是关于最佳实践的调查,目的是避免样板代码,而不是其他任何东西else@BrettCaswell由于OP没有解释他在每个控制器中对事件侦听器所做的操作,因此很难推荐一个替代方案;但是,它并没有完全解决问题和意图。i、 您是否建议O.P.继续在每个控制器中添加EventListener和处理程序?你看,问题更多的是关于最佳实践的调查,目的是避免样板代码,而不是其他任何东西else@BrettCaswell由于OP没有解释他在每个控制器中对事件侦听器所做的操作,因此很难推荐替代方案。