Angular 2 HostListener 按键检测到转义键?

问题描述 投票:0回答:7

我使用以下方法来检测页面上的按键。我的计划是检测何时按下 Escape 键并在按下时运行一个方法。目前我只是尝试记录按下了哪个键。然而,Escape 键永远不会被检测到。

@HostListener('document:keypress', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
  console.log(event);
  let x = event.keyCode;
  if (x === 27) {
      console.log('Escape!');
  }
}
javascript angular escaping keypress
7个回答
215
投票

尝试使用

keydown
keyup
事件来捕获
Esc
键。本质上,您可以将
document:keypress
替换为
document:keydown.escape

@HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {
    console.log(event);
}

43
投票

使用以下代码对我有用:

const ESCAPE_KEYCODE = 27;

@HostListener('document:keydown', ['$event']) onKeydownHandler(event: KeyboardEvent) {
    if (event.keyCode === ESCAPE_KEYCODE) {
        // ...
    }
}

或更短的方式:

@HostListener('document:keydown.escape', ['$event']) onKeydownHandler(evt: KeyboardEvent) {
    // ...
}

32
投票

现代方法,
event.key == "Escape"

旧的替代方案(

.keyCode
.which
)已弃用。

@HostListener('document:keydown', ['$event']) onKeydownHandler(event: KeyboardEvent) {
    if (event.key === "Escape") {
        // Do things
    }
}

11
投票

就我而言(使用 Angular 10)

keydown.escape
可以很好地通过 console.log() 跟踪事件
escape

@HostListener('keydown.escape')
fn() {
 console.log();
}

但是角度变化检测器只有在使用

keyup.escape
时才能正常工作。


5
投票

Angular 通过 @HostListener 装饰器使这一切变得简单。这是一个函数装饰器,接受事件名称作为参数。当该事件在宿主元素上触发时,它会调用关联的函数。

@HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: 
    KeyboardEvent) {
    this.closeBlade();
   }

3
投票

keydown 和 keyup 似乎有效:http://embed.plnkr.co/VLajGbWhbaUhCy3xss8l/


0
投票

我正在使用 Angular 16,只有

window:keyup
(不是 keydown 或 keypress)对我有用:

@HostListener('window:keyup', ['$event'])
  onKeyup(event: any) {
    if (event.key == 'Escape') {
      console.log('Escape key pressed!');
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.