77 votes

Quel est le moyen utilisé par AngularJS pour créer des raccourcis clavier globaux?

Je suppose que je devrais utiliser directive, mais il semble étrange d'ajouter une directive à body, mais écoutez les événements sur le document.

Quelle est la bonne façon de faire cela?

MISE À JOUR: Trouvé AngularJS interface utilisateur et a vu la réalisation de la directive keypress.

69voto

jmagnusson Points 1620

Je dirais qu'une manière plus appropriée (ou "manière angulaire") serait de l'ajouter à une directive. Voici un simple pour vous aider à aller ( il suffit d' ajouter keypress-events attribut <body> ):

 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);
        });
      }
    };
  }
]);
 

Dans votre directive, vous pouvez simplement faire quelque chose comme ceci:

 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: '<h1>{{keyPressed}}</h1>'
    };
  }
]);
 

27voto

user1338062 Points 1553

Utilisez $document.bind :

 function FooCtrl($scope, $document {
    ...
    $document.bind('keypress', function(event) {
        console.debug(event)
    })
}
 

20voto

A. Murray Points 460

Je ne peux pas se porter garant pour elle tout de suite, mais j'ai commencé à prendre un coup d'oeil à AngularHotkeys.js:

http://chieffancypants.github.io/angular-hotkeys/

Sera mise à jour avec plus d'informations une fois que j'ai mes dents.

Mise à jour 1: Oh, il y a un package nuget: angulaires-raccourcis clavier

Mise à jour 2: actaully très facile à utiliser, il suffit de configurer votre contraignante en votre trajet ou que je suis en train de faire, dans votre contrôleur:

hotkeys.add('n', 'Create a new Category', $scope.showCreateView);
hotkeys.add('e', 'Edit the selected Category', $scope.showEditView);
hotkeys.add('d', 'Delete the selected Category', $scope.remove);

10voto

Tom Söderlund Points 1319

Voici un exemple de service AngularJS pour les raccourcis clavier: http://jsfiddle.net/firehist/nzUBg/

Il peut ensuite être utilisé comme ceci:

 function MyController($scope, $timeout, keyboardManager) {
    // Bind ctrl+shift+d
    keyboardManager.bind('ctrl+shift+d', function() {
        console.log('Callback ctrl+shift+d');
    });
}
 

10voto

Jason Points 8799

Voici un tableau qui explique comment j’ai fait cela avec jQuery - je pense qu’il existe un meilleur moyen

http://plnkr.co/edit/cBHOuHyrHz1Gk7zzYVX8

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X