Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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 角度捕捉全局按键_Javascript_Angularjs_Keypress - Fatal编程技术网

Javascript 角度捕捉全局按键

Javascript 角度捕捉全局按键,javascript,angularjs,keypress,Javascript,Angularjs,Keypress,这个问题有很多答案,但我不知道如何解决两个问题。经过研究,我建立了非常简单的指令 .directive('keypressEvents', function ($document) { return { restrict: 'A', link: function () { $document.bind('keypress', function (e) { alert(e.keyCode);

这个问题有很多答案,但我不知道如何解决两个问题。经过研究,我建立了非常简单的指令

.directive('keypressEvents', function ($document) {
    return {
        restrict: 'A',
        link: function () {
            $document.bind('keypress', function (e) {
                alert(e.keyCode);
            });
        }
    }
});

第一个问题更像是一个问题,如果我把它设置为
angular.service('myService',myServiceFunction'),它会在全球范围内工作吗?第二个是一些键不起作用,比如ESC、箭头ctrl等。我正在处理这个

我想你需要这样的东西


如果它确实是全局处理程序,则可以将其绑定到$document。您可以在运行阶段添加它。在那里,您将能够注入实现处理逻辑所需的其他依赖项。您也可以将其添加到某个服务或指令中,如果您认为其中有更多的内容,那么您不需要关心它在哪里,因为只需将其绑定到$document,它就会成为全局的

否则,您可以创建类似于您的指令并将其绑定到元素。这使您可以选择在哪个元素上添加指令,如果它是全局的,那么就可以将它添加到主体上,如果不是,那么您可以选择容器元素

关于第二个问题,Esc键上的事件不会触发,因为Esc键不是字符。因此,您需要使用keydown或keyup事件来代替按键

是带有keyup事件的代码的工作示例


我希望这个答案能对你有所帮助。

好的,我明白你的意思,我认为最好是这样。run()而不是config,你认为呢?对于你在这里发布的案例来说,这并不重要。我不会给出任何进一步的建议,因为我不知道你到底想实施什么。若您想在处理程序中使用任何服务或提供者,最好将其包装到服务中,并将其注入到run方法中<代码>…运行(函数(myGlobalKeyHandlerService){myGlobalKeyHandlerService.start();})
注意,应该在组件的$onDestroy方法或范围的$destroy事件中解除此事件的绑定。否则,您将在此处创建内存泄漏。
angular.module('myApp', [])
.config(function () {
  angular.element(document).bind('keyup', function (e) {
    alert(e.keyCode);
  });
});
$document.bind('keyup', function (e) {
    alert(e.keyCode);
});