2016-02-24 1 views
21

Angular2アプリケーションでグローバルキーボードショートカット(a.k.a.ホットキー)を作成する適切な方法は何ですか?グローバルキーボードショートカット(a.k.a.ホットキー)を作成する角度2とは何ですか?

出発点がうまくいくとします。「?」チートシートの場合は「Alt + s」、フォームの提出の場合は「Alt + s」となります。

"?"何らかの形でメインコンポーネントに接続し、特定のホットキーで応答する必要のあるコンポーネントに適用される属性ディレクティブを作成しますが、入力フィールドが "?"に応答しないようにするにはどうすればよいですか?

答えて

36

あなたは

doSomething($event) { 
    // read keyCode or other properties 
    // from event and execute a command 
} 

は、ホストコンポーネント自体

@Component({ 
    selector: 'app-component', 
    host: { '(window:keydown)': 'doSomething($event)' }, 
}) 
class AppComponent { 
    doSomething($event) { 
    ... 
    } 
} 

または上で聴くに

<div (window:keydown)="doSomething($event)">click me<div> 

は、あなたのコンポーネントでこのメソッドを呼び出すために、あなたのテンプレートでこの構文を使用することができますこの同等の構文で

@Component({ 
    selector: 'app-component', 
}) 
class AppComponent { 
    @HostListener('window:keydown', ['$event']) 
    doSomething($event) { 
    ... 
    } 
} 
+0

が '' 「のサポートされていないようだコンボキーの押下に対処する方法についてのあらゆる小さい細部と答え?(ウィンドウ:?のKeyDown) '。おそらくhttps://github.com/angular/angular/blob/630d93150a58581a0d474ebf1befb5d09b6813c5/modules/angular2/src/platform/browser/browser_adapter.dartに掲載されているコードのみ –

+1

私のキーボードでは?実際は "Shift + /"で、(ウィンドウ:keydown)はそれらを別々にキャッチします。 –

+0

あなたの最後のコメントから何を作るか分かりません。それは質問なのか解明なのか...? –

7

あなたはそれはあなたがこのようなホットキーを作成することができますangular2-hotkeys

と呼ばれる、私が作成したライブラリを使用することができます:シンプルかつエレガントな解決策には、次のようようになります。

constructor(private _hotkeysService: HotkeysService) { 
    this._hotkeysService.add(new Hotkey('meta+shift+g', (event: KeyboardEvent) => { 
    console.log('Typed hotkey'); 
    return false; // Prevent bubbling 
})); } 
+0

私はライブラリを試しましたが、ビルド時に意味エラーが発生しました。 ... node_modules/angular2-hotkeys/src/directives/hotke ys.directive.ts(11,110):エラーTS2304:「ExtendedKeyboardEvent」という名前が見つかりません。 ... もっと 。 –

+0

このgithubの問題のガイドに従って、問題を修正することができます:https://github.com/brtnshrdr/angular2-hotkeys/issues/7 –

+0

角度のあるcliベータ版では動作しません。 –

0

を: -

クリック可能な要素を持つショートカットのバインディングを格納するグローバルサービスを作成します。 注: - コンポーネント上のバインディングを削除するためにNgOnDestroyを使用してください。

このように、キーコードを入力する指示文を作成します。

<button [angularHotKey]="[17,78]">New Document</button> 
<!-- CTRL = 17 & n = 78 --> 

今、あなたのルートほとんどのコンポーネントで、キー入力を聞いて、ホットキーのためのグローバルサービスの要素を見つけるための指標としてそれらを使用しています。今では参照を取得することで、このようなことをします。

私はあなたがフォーマットされていると仮定は、-... = 1-23-32この形式でキーコードを記録フォーマットを降順/昇順で並べ替えることを忘れてはいけない、 両方のサービスに鍵ペアの配列に追加しながら

if(this.keypair[combo].length)this.keypair[combo].click(); 

this.keypair[combo]を確認しながらするangularHotKey directiveが追加された要素の参照を含みます。

注:angularHotKeyディレクティブで、新しいキーペアと要素/クリック可能な参照を追加しているときに同じコンボでペアが存在するかどうかをチェックしてください。例外が発生した場合、デバッグ中に役立ちます。愚かな間違いを避け、ngOnDestroyメソッドのAngular 2コンポーネントクラスでは、子要素とペアになっているすべてのショートカットを削除するロジックを定義します。

http://keycode.info/にアクセスして、キーボードにあるすべての種類のキーのキーコードを取得してください。

JavaScript multiple keys pressed at once

関連する問題