Angular Catch全局按键

Gon*_*nys 9 javascript keypress angularjs

这个问题有很多答案,但我无法弄清楚如何解决两个问题.经过研究我构建了非常简单的指令.

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

第一个问题更像是一个问题,如果我做到了angular.service('myService', myServiceFunction);,它会在全球范围内运作吗?第二个是一些键不工作,如ESC,箭头ctrl等我正在研究这个CODEPEN

S.K*_*ski 13

如果它是真正的全局处理程序,您可以将它绑定到$ document.您可以在运行阶段添加它.在那里,您将能够注入实现处理逻辑所需的其他依赖项.你也可以在某些服务或指令中添加它,如果你认为它属于更多,你不需要关心在哪里,因为只需将它绑定到$ document就可以使它全局化.

否则,您可以创建类似于您的指令并将其绑定到元素.这使您可以选择添加指令的元素,如果它是全局的,那么它就足以将它添加到正文中,如果没有,那么您可以选择容器元素.

关于第二个问题,Esc键上的事件未被触发,因为Esc是键而不是字符.因此,而不是按键,你需要使用的keydownKEYUP事件.

以下是使用keyup事件的代码的工作示例.

$document.bind('keyup', function (e) {
    alert(e.keyCode);
});
Run Code Online (Sandbox Code Playgroud)

我希望这个答案会对你有所帮助.