2017-02-20 4 views
12

J'utilise la méthode suivante pour détecter les pressions de touche sur une page. Mon plan est de détecter quand la touche Échap est enfoncée et d'exécuter une méthode si c'est le cas. Pour l'instant, je tente juste de noter quelle touche est enfoncée. Cependant, la touche Escape n'est jamais détectée.Angular 2 HostListener keypress détecter la touche d'échappement?

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

Répondre

19

Essayez avec un événement keydown ou keyup pour capturer la clé Esc.

+1

Merci à tous. tu as fait ma journée! –

+0

Pour choisir l'un des événements clés à utiliser, cochez cette réponse SO: https://stackoverflow.com/a/46403258/3380547 – Sagar

+0

Ce n'était que «keyup» qui fonctionnait pour moi: bravo: – vincecampanale

15

Il a travaillé pour moi en utilisant le code suivant:

const ESCAPE_KEYCODE = 27; 

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

ou plus court chemin:

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

approche moderne

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