2016-01-26 17 views
13

Angular2を調べ始め、3つのネストされたコンポーネントを使って基本的な作業を開始しました。しかし、私はどのように文書にkeypressハンドラを追加するのか分からない。

もしそうでなければ、ドキュメントのキー入力を聞いてそれに反応するのですか? 明確にするには、入力ではなく、文書そのもののキーパーに応答する必要があります。

角1では、私は指令を作成して$ documentを使用します。

$document.on("keydown", function(event) { 

     // if keycode... 
     event.stopPropagation(); 
     event.preventDefault(); 

     scope.$apply(function() {    
     // update scope...   
     }); 

しかし、私はAngular2の解決策をまだ見つけていません。

答えて

15

あなたはこのような何かを行うことができます。

@Component({ 
    host: { 
    '(document:keyup)': '_keyup($event)', 
    '(document:keydown)': '_keydown($event)', 
    }, 
}) 
export class Component { 
    private _keydown(event: KeyboardEvent) { 
    let prevent = [13, 27, 37, 38, 39, 40] 
     .find(no => no === event.keyCode); 
    if (prevent) event.preventDefault(); 
    } 
    private _keyup(event: KeyboardEvent) { 
    if (event.keyCode === 27) this.close(); 
    else if (event.keyCode === 13) ...; 
    else if (event.keyCode === 37) ...; 
    else if (event.keyCode === 38) ...; 
    else if (event.keyCode === 39) ...; 
    else if (event.keyCode === 40) ...; 

    // else console.log(event.keyCode); 
    } 
} 

ところで、角度チームは現時点では、この状況だかわからない、いくつかの興味深いideas about keyboard eventsを、持っていました。それも可能ですit's working、自分自身を試していない:)

+0

前に 'document:keyup'構文を見たことがありません。あなたはそれについての参考文献を持っていますので、私はもっと学ぶことができますか? –

+0

@MarkRajcok初めて見つけた場所はわかりません。公式[Developer Guides](https://)で '' angular.io/docs/ts/latest/guide/user-input.html) - **キーイベントフィルタリングを探してください** ...私は 'document:_event_'構文がどこにあるのかを探そうとします。たとえば、 'window:click 'で動作します。 – Sasxa

+1

@MarkRajcok私は「時間外にクリック」を探していましたが、[Angular2 Modal](https://github.com/shlomiassaf/angular2-modal/blob/master/src/angular2-modal/)のコードが見つかりました。コンポーネント/ bootstrapModalContainer.ts)。その後、私は[key_events](https://github.com/angular/angular/blob/master/modules/angular2/src/platform/dom/events/key_events.ts)のソースコードを見て、いくつか試してみました。この構文に... – Sasxa

関連する問題