代码之家  ›  专栏  ›  技术社区  ›  William

如果在文档中的任何地方按一个键,如何获得按键?

  •  3
  • William  · 技术社区  · 7 年前

    无论何时何地,我都在尝试启动按键事件 进来 ,但我只能通过使用ng键在DOM元素中指定来实现这一点。

    我使用纯javascript和以下代码获得了这个结果:

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

    但我不确定这是最好的方法,还是“角度法”。

    3 回复  |  直到 7 年前
        1
  •  2
  •   tymeJV    7 年前

    我将它包装在一个指令中,然后从那里开始,例如:

    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>
    
        2
  •  2
  •   Matthew Cawley    7 年前

    要在嵌套控制器上调用函数。。。

    您可以使用内置 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

        3
  •  -1
  •   Ben    7 年前

    如果你使用AngularJS,你应该 ng-keydown 在最外面的HTML元素上。

    <body ng-keydown="myKeyDownFunction($event)"></body>
    
    $scope.myKeyDownFunction = function($event) {
        if($event.keycode === 13) {
             // Do what you need to do
        }
    }