这个问题有很多答案,但我无法弄清楚如何解决这两个问题.经过研究我构建了非常简单的指令.
.directive('keypressEvents',function ($document) { return { restrict: 'A',link: function () { $document.bind('keypress',function (e) { alert(e.keyCode); }); } } });
第一个问题更像是一个问题,如果我使它成为angular.service(‘myService’,myServiceFunction);,它会全局工作吗?第二个是一些关键不起作用,如ESC,箭头ctrl等我正在研究这个CODEPEN
解决方法
如果它是真正的全局处理程序,您可以将它绑定到$document.您可以在运行阶段添加它.在那里,您将能够注入实现处理逻辑所需的其他依赖项.你可以在一些服务或指令中添加它,如果你认为它们属于更多,你不需要关心在哪里,因为仅仅通过将它绑定到$document将使它成为全局.
否则,您可以创建类似于您的指令并将其绑定到元素.这使您可以选择添加指令的元素,如果它是全局的,那么它就足以将它添加到正文中,如果没有,那么您可以选择容器元素.
关于第二个问题,Esc键上的事件未被触发,因为Esc是键而不是字符.因此,您需要使用keydown或keyup事件来代替keypress.
$document.bind('keyup',function (e) { alert(e.keyCode); });
我希望这个答案会对你有所帮助.