如果在文档中的任何位置按键,如何获得按键?

时间:2017-09-20 18:40:50

标签: angularjs

我试图随时随地触发按键事件输入,但我只能在使用ng-keypress指定DOM元素时达到此目的。

我使用纯JavaScript与此代码达到了此结果:

document.onkeydown = function(e){
    if(e.keyCode === 13){
      //do something
    }
}

但我不确定这是不是最好的方式,也不是'#34;棱角分明的方式"这样做。

4 个答案:

答案 0 :(得分:2)

我将它包装在指令中并从那里开始,例如:

angular.module("myApp").directive("keypressDetector", function() {
    return {
        restrict: "A",
        link: function(scope, elem, attrs) {
            document.onkeydown = function(e){
                if(e.keyCode === 13){
                    //do something
                }
            }
        }
    }
})

并使用它:

<body keypress-detector></body>

答案 1 :(得分:1)

在嵌套控制器上调用函数...

您可以在ng-keypress代码中使用内置<body>指令:

<body ng-keypress="enterKeyPressed($event)">

可以绑定到模块的$rootScope块中run()上的函数:

app.run(function($rootScope) {
  $rootScope.enterKeyPressed = function(e) {
    if (e.keyCode === 13) {
      $rootScope.$broadcast("EnterKeyPressed");
    }
  };
});

这会引发一个事件,可以使用控制器中的$scope来获取:

$scope.$on("EnterKeyPressed", function() {
  vm.incrementCounter();
});

<强>演示

CodePen: Using ng-keypress with an event

答案 2 :(得分:-1)

如果您正在使用AngularJS,那么您应该http://angular-data-grid.github.io/demo/bootstrap/multiple.html使用最外层的HTML元素。

例如:

<body ng-keydown="myKeyDownFunction($event)"></body>

$scope.myKeyDownFunction = function($event) {
    if($event.keycode === 13) {
         // Do what you need to do
    }
}

答案 3 :(得分:-1)

我认为这个问题已经得到解答了......

假设您使用的是Angular1,我认为可以找到答案here

假设您使用的是Angular2,我认为可以找到答案here