特定のキーをAngularのKeyupおよびKeydownイベントにバインドする方法
序章
Angular2+テンプレートのkeyup
またはkeydown
イベントにバインドする場合、キー名を指定できます。 これにより、イベントに適用されるフィルターが適用されるため、特定のキーが押されたときにのみトリガーされます。
この記事では、keyup
およびkeydown
イベントをリッスンするときにキー名を使用する方法を学習します。
キー名の使用
まず、キー名を使わない例を見てみましょう。
ユーザーが情報を提供するための<input>
要素があるとします。 ユーザーがENTER
キーを押したときに、コンソールにログインします。
<input (keydown)="onKeydown($event)">
onKeydown()
を起動するkeydown
イベントハンドラーをバインドしました。
次に、ENTER
キーの押下を処理するonKeydown()
関数を記述しましょう。
onKeydown(event) { if (event.key === "Enter") { console.log(event); } }
keydown
イベントごとにチェックが実行され、event.key
の値がEnter
であるかどうかが判別されます。 true
の場合、event
をコンソールに記録します。
同じ例ですが、イベントにENTER
キー名が追加されています。
<input (keydown.enter)="onKeydown($event)">
onKeydown()
を起動するkeydown.enter
pseudo-eventハンドラーをバインドしました。
次に、onKeydown()
関数を書き直してみましょう。
onKeydown(event) { console.log(event); }
Angularのkeydown.enter
疑似イベントに依存することで、event.key
の値がEnter
であるかどうかを手動で確認する必要がなくなりました。
特殊修飾キーと組み合わせの使用
この機能は、ENTER
、エスケープ(ESC
)、SHIFT
、ALT
、TAB
、BACKSPACE
、およびコマンド( meta ):
キー | キー名 |
---|---|
ENTER
|
<input (keydown.enter)="...">
|
ESC
|
<input (keydown.esc)="...">
|
ALT
|
<input (keydown.alt)="...">
|
TAB
|
<input (keydown.tab)="...">
|
BACKSPACE
|
<input (keydown.backspace)="...">
|
CONTROL
|
<input (keydown.control)="...">
|
COMMAND
|
<input (keydown.meta)="...">
|
ただし、文字、数字、矢印、およびファンクションキー(F1
からF12
)でも機能します。
キー | キー名 |
---|---|
A
|
<input (keydown.a)="...">
|
9
|
<input (keydown.9)="...">
|
ARROWUP
|
<input (keydown.arrowup)="...">
|
F4
|
<input (keydown.f4)="...">
|
これは、Angularがフィルタリングできるキー値の完全なリストです。
キーを組み合わせて、キーの組み合わせがトリガーされたときにのみイベントをトリガーすることもできます。 次の例では、CONTROL
キーと1
キーが同時に押された場合にのみイベントがトリガーされます。
<input (keyup.control.1)="onKeydown($event)">
何が可能かを理解するための例をさらにいくつか示します。
キー | キー名 |
---|---|
SHIFT+ESC
|
<input (keydown.shift.esc)="...">
|
SHIFT+ARROWDOWN
|
<input (keydown.shift.arrowdown)="...">
|
SHIFT+CONTROL+Z
|
<input (keydown.shift.control.z)="...">
|
結論
Angular2+テンプレートがkeyup
およびkeydown
疑似イベントによるキー名のフィルタリングをどのようにサポートするかを学習しました。
このアプローチの利点には、キー値の手動チェックの繰り返しが少なく、修飾キーと非修飾キーの組み合わせを処理することが含まれます。
Angularについて詳しく知りたい場合は、Angularトピックページで演習とプログラミングプロジェクトを確認してください。