2016-07-01 4 views
7

Wie kann ich eine beliebige Taste drücken erkennen auf Angular 2 (zB nicht notwendigerweise in einem Eingabefeld)Wie erkennt man einen beliebigen Tastendruck in Angular 2?

Zur Zeit habe ich es geschafft diese mit dem folgenden Code zu tun:

import {Component, HostListener} from "@angular/core"; 

@Component(<any>{ 
    selector: 'foo', 
    template: `<h1>Foo</h1>`, 
}) 
export class FooComponent { 
    @HostListener('document:keypress', ['$event']) 
    keypress(e: KeyboardEvent) { 
     console.log("Key Up! " + e.key); 
    } 
} 

Der obige Code verwaltet funktionieren für die meisten Charaktere z alphanumerische Zeichen, Interpunktionszeichen, Symbole usw.

Das Problem ist, dass diese Methode nicht ausgeführt, wenn Tasten wie SHIFT, CTRL, F1 ... F12, Tab, ALT usw.

+2

Sie müssen ('Dokument: keydown') anstelle von Tastendruck verwenden, um Schicht, Strg, etc ... zu erhalten –

+1

Es funktioniert! Bitte machen Sie Ihren Kommentar als Antwort, damit ich es akzeptieren kann. –

+0

Könnte der Antwort (Doku) hinzugefügt werden: https://angular.io/docs/ts/latest/guide/user-input.html – bene

Antwort

7

Sie müssen verwenden ('document:keydown') stattdessen drücken von ('document:keypress') um Schicht zu bekommen, ctrl ...

+0

auch nützlich, um Escape zu bekommen – Bob