如何将特定键绑定到Angular中的Keyup和Keydown事件

来自菜鸟教程
跳转至:导航、​搜索

介绍

当绑定到 Angular 2+ 模板中的 keyupkeydown 事件时,您可以指定 键名。 这将应用要应用于事件的过滤器,因此仅在按下特定键时才会触发。

在本文中,您将学习如何在监听 keyupkeydown 事件时使用键名。

使用键名

首先,让我们看一个不使用键名的示例。

假设我们有一个 <input> 元素供用户提供信息。 当用户按下 ENTER 键时,我们希望登录到控制台:

<input (keydown)="onKeydown($event)">

我们绑定了一个触发 onKeydown()keydown 事件处理程序:

接下来,让我们编写 onKeydown() 函数来处理按下 ENTER 键:

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)、SHIFTALTTABBACKSPACE 和命令(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)="...">

但它也适用于字母、数字、箭头和功能键(F1F12):

键名
A <input (keydown.a)="...">
9 <input (keydown.9)="...">
ARROWUP <input (keydown.arrowup)="...">
F4 <input (keydown.f4)="...">

这是 Angular 能够过滤的 键值 的完整列表。

您也可以将按键组合在一起以仅在触发组合键时触发事件。 在以下示例中,只有同时按下 CONTROL1 键时才会触发事件:

<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)="...">

结论

您已经了解了 Angular 2+ 模板如何支持使用 keyupkeydown 伪事件过滤键名。

这种方法的好处包括减少对键值的重复手动检查以及处理修饰键和非修饰键组合。

如果您想了解有关 Angular 的更多信息,请查看 我们的 Angular 主题页面 以获取练习和编程项目。