【问题标题】:Is there any file/class holding constants for each keyboard events?每个键盘事件是否有任何文件/类保存常量?
【发布时间】:2018-07-14 04:36:40
【问题描述】:

在 Angular 中,我将数据与主机侦听器绑定,如下面的代码

@HostListener('window:keyup', ['$event'])
onKeyUp(event: KeyboardEvent) {
  if (event.keyCode === 13) {
    this.onEnterClicked(event);
  }
}

在这段代码中,我想用 Keycode.ENTER 替换 13。 但是没有可用的类为 angular 和 javascript 中的每个键保存常量。

所以有没有我错过的课程?如果不是,那么为什么 javascript 或 Angular 没有在一个地方定义常量?

【问题讨论】:

  • 你检查了event.key,它返回字符串。 event.keyCode 返回 13event.key 返回字符串 Enter
  • @Akhil Aravind 是的,我检查过了,但在那种情况下,我仍然必须在 13 的位置写常量值 Enter

标签: javascript angular


【解决方案1】:

我想你想要

if (event.key === KeyEventEnum.Enter) {
   ...
}

if (event.key === KeyEventEnum.Escape) {
   ...
}

if (event.key === KeyEventEnum.Shift) {
   ...
}

if (event.key === KeyEventEnum.Ctrl) {
   ...
}

而不是你使用like

if (event.key === "Enter") {
...
}

Angular 没有任何常量或枚举来将所有关键代码保存在一个地方,但如果您想要任何枚举或常量,请访问以下链接一次,这可能会对您有所帮助。 它是一个 Angular 包,您必须将其包含在您的项目中。

https://github.com/nfriend/ts-keycode-enum

【讨论】:

  • 感谢您提供宝贵的答案,但是否有任何理由 Angular 或 javascript 不做同样的事情,即使它是广泛使用的类。
【解决方案2】:

使用event.key 代替event.keyCodekeyCode 返回13 用于输入,event.key 返回"Enter" 字符串

 HostListener('window:keyup', ['$event'])
    onKeyUp(event: KeyboardEvent) {
      if (event.key === "Enter") {
        this.onEnterClicked(event);
      }
    }

【讨论】:

  • event.key 似乎比 event.keyCode 好,但我仍然必须与字符串进行比较,并且需要搜索每个键,如 KeyQ 以获取 q 等,并且可能有拼写的机会错误。
  • @RaviSevta,我不认为 javascript 有这样的选项,但听起来很容易
  • 感谢您的宝贵时间,但我认为 javascript 应该有这样的选项。
  • @RaviSevta ,继续搜索,如果您找到解决方案,请不要忘记在此处发布,干杯..:D
【解决方案3】:

一个 NPM @etsoo/shared 包括:

  • Keyboard.Keys 用于 KeyboardEvent.key 常量
  • Keyboard.Codes 用于 KeyboardEvent.code 常量 这可能会有所帮助。

【讨论】:

    【解决方案4】:

    KeyCode 是deprecated

    要了解输入的内容,我们应该使用e.key,即shift+a 的结果是大写的A

    要了解按下了哪个物理按钮,我们应该使用e.code,即按左移将给我们ShiftLeft

    可以在 npm pacakge etsoo/shared 或其Keyboard Enums source file 中找到这两个的枚举。

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2014-10-08
      • 2012-06-19
      • 2015-08-03
      相关资源
      最近更新 更多