2017-02-20 13 views
12

Korzystam z poniższej metody, aby wykryć naciśnięcia klawiszy na stronie. Mój plan polega na wykryciu, kiedy klawisz Escape jest wciśnięty i uruchomić metodę, jeśli tak. Na razie właśnie próbuję zarejestrować, który klawisz jest wciśnięty. Jednak klawisz Escape nigdy nie zostanie wykryty.Angular 2 Klucz protokołu HostListener wykrywa klawisz Escape?

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

Odpowiedz

19

Spróbuj z imprezy keydown lub keyup przechwycić klucz Esc.

+1

Dzięki, bro. zrobiłeś mój dzień! –

+0

Aby zdecydować, który z kluczowych zdarzeń należy użyć, sprawdź tę odpowiedź SO: https://stackoverflow.com/a/46403258/3380547 – Sagar

+0

To tylko "keyup", który pracował dla mnie: thumbs up: – vincecampanale

15

on pracował dla mnie za pomocą następującego kodu:

const ESCAPE_KEYCODE = 27; 

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

lub w krótszym sposób:

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

nowoczesne podejście

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