81 votes

Angular 2 HostListener Keypress Détecter la touche d'échappement?

J'utilise la méthode suivante pour détecter les pressions de touches sur une page. Mon plan consiste à détecter le moment où la touche Échap est enfoncée et à exécuter une méthode dans ce cas. Pour le moment, j'essaie simplement d'enregistrer quelle touche est enfoncée. Cependant, la touche Échap n'est jamais détectée.

 @HostListener('document:keypress', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
  console.log(event);
  let x = event.keyCode;
  if (x === 27) {
      console.log('Escape!');
  }
}
 

164voto

Sawant Points 543

Essayez-le avec un événement keydown ou keyup pour capturer la clé Esc . En substance, vous pouvez remplacer document:keypress par document:keydown.escape :

 @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {
    console.log(event);
}
 

42voto

Gaurav Pandvia Points 517

Cela a fonctionné pour moi en utilisant le code suivant:

 const ESCAPE_KEYCODE = 27;

@HostListener('document:keydown', ['$event']) onKeydownHandler(event: KeyboardEvent) {
    if (event.keyCode === ESCAPE_KEYCODE) {
        // ...
    }
}
 

ou de manière plus courte:

 @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(evt: KeyboardEvent) {
    // ...
}
 

23voto

Gibolt Points 4072

Une approche moderne

 @HostListener('document:keydown', ['$event']) onKeydownHandler(event: KeyboardEvent) {
    if (event.key === "Escape") {
        // Do things
    }
}
 

3voto

Lucas Tétreault Points 883

keydown et keyup semblent fonctionner: http://embed.plnkr.co/VLajGbWhbaUhCy3xss8l/

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