Angularは、イベント名とイベントが発生するたびに実行されるステートメントを括弧で囲むことで、テンプレート内の要素にイベントリスナーを定義することをサポートしています。
ネイティブイベントのリスナー
HTML要素にイベントリスナーを追加する場合は、イベントを括弧 ()
で囲みます。これにより、リスナーのステートメントを指定できます。
@Component({ template: ` <input type="text" (keyup)="updateField()" /> `, ...})export class AppComponent({ updateField(): void { console.log('Field is updated!'); }})
この例では、Angularは <input>
要素が keyup
イベントを発行するたびに updateField
を呼び出します。
click
、keydown
、mouseover
などのネイティブイベントのリスナーを追加できます。詳細については、MDNの要素のすべての利用可能なイベントをご覧ください。
イベント引数へのアクセス
Angularは、すべてのテンプレートイベントリスナーで、イベントオブジェクトへの参照を含む $event
という名前の変数を提供します。
@Component({ template: ` <input type="text" (keyup)="updateField($event)" /> `, ...})export class AppComponent { updateField(event: KeyboardEvent): void { console.log(`The user pressed: ${event.key}`); }}
キー修飾子の使用
特定のキーの特定のキーボードイベントをキャプチャする場合は、次のようなコードを記述できます。
@Component({ template: ` <input type="text" (keyup)="updateField($event)" /> `, ...})export class AppComponent { updateField(event: KeyboardEvent): void { if (event.key === 'Enter') { console.log('The user pressed enter in the text field.'); } }}
ただし、これは一般的なシナリオであるため、Angularではピリオド(.
)文字を使用して特定のキーを指定することでイベントをフィルタリングできます。これにより、コードを簡素化できます。
@Component({ template: ` <input type="text" (keyup.enter)="updateField($event)" /> `, ...})export class AppComponent({ updateField(event: KeyboardEvent): void { console.log('The user pressed enter in the text field.'); }})
追加のキー修飾子を追加できます。
<!-- Matches shift and enter --><input type="text" (keyup.shift.enter)="updateField($event)" />
Angularは、alt
、control
、meta
、shift
の修飾子をサポートしています。
キーボードイベントにバインドするキーまたはコードを指定できます。キーとコードフィールドは、ブラウザのキーボードイベントオブジェクトのネイティブな部分です。デフォルトでは、イベントバインディングは、キーボードイベントのキー値を使用することを前提としています。
Angularでは、組み込みの code
サフィックスを提供することで、キーボードイベントのコード値も指定できます。
<!-- Matches alt and left shift --><input type="text" (keydown.code.alt.leftshift)="updateField($event)" />
これは、異なるオペレーティングシステム間でキーボードイベントを一貫して処理する場合に役立ちます。たとえば、MacOSデバイスでAltキーを使用する場合、key
プロパティはAltキーで既に修飾された文字に基づいてキーを報告します。これは、Alt + Sのような組み合わせが 'ß'
の key
値を報告することを意味します。ただし、code
プロパティは、生成された文字ではなく、押された物理的なまたは仮想的なボタンに対応します。