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