What is AngularJS way to create global keyboard shortcuts?

后端 未结 12 2115
一整个雨季
一整个雨季 2020-11-30 22:04

I suppose that I should use directive, but it seems strange to add directive to body, but listen events on document.

What is a proper way to do this?

UPDATE:

12条回答
  •  离开以前
    2020-11-30 23:04

    I would say a more proper way (or "Angular way") would be to add it to a directive. Here's a simple one to get you going (just add keypress-events attribute to ):

    angular.module('myDirectives', []).directive('keypressEvents', [
      '$document',
      '$rootScope',
      function($document, $rootScope) {
        return {
          restrict: 'A',
          link: function() {
            $document.bind('keypress', function(e) {
              console.log('Got keypress:', e.which);
              $rootScope.$broadcast('keypress', e);
              $rootScope.$broadcast('keypress:' + e.which, e);
            });
          }
        };
      }
    ]);
    

    In your directive you can then simply do something like this:

    module.directive('myDirective', [
      function() {
        return {
          restrict: 'E',
          link: function(scope, el, attrs) {
            scope.keyPressed = 'no press :(';
            // For listening to a keypress event with a specific code
            scope.$on('keypress:13', function(onEvent, keypressEvent) {
              scope.keyPressed = 'Enter';
            });
            // For listening to all keypress events
            scope.$on('keypress', function(onEvent, keypressEvent) {
              if (keypress.which === 120) {
                scope.keyPressed = 'x';
              }
              else {
                scope.keyPressed = 'Keycode: ' + keypressEvent.which;
              }
            });
          },
          template: '

    {{keyPressed}}

    ' }; } ]);

提交回复
热议问题