从(按键)angular2获取按键

时间:2015-12-08 13:54:48

标签: javascript angular

在Angular 2中使用(按键)时,是否可以找出按下了哪个键?

E.g。

<input type=text (keypress)=eventHandler()/>

public eventHandler() {
    //Some code
    console.log(keyPressed);
}

编辑:似乎我的命名约定有点过时了。我不是指AngularJS 2,我的意思是带有打字稿的Angular 2.0。

4 个答案:

答案 0 :(得分:82)

$event传递给您的事件处理程序。 $event是一个DOM KeyboardEvent

<input type=text (keypress)="eventHandler($event)">

eventHandler(event) {
   console.log(event, event.keyCode, event.keyIdentifier);
} 

如果您知道所需的KeyboardEvent属性,可以将其传递给事件处理程序:

<input type=text (keypress)="eventHandler($event.keyCode)">

eventHandler(keyCode) {...}

答案 1 :(得分:13)

@Component({
  selector: 'key-up3',
  template: `
    <input #box (keyup.enter)="onEnter(box.value)">
    <p>{{value}}</p>
  `
})
export class KeyUpComponent_v3 {
  value = '';
  onEnter(value: string) { this.value = value; }
}

或者像这样使用..

 <input #box (keyup.enter)="onSubmit(form.value)">
 <form [formGroup]="form" (ngSubmit)="onSubmit(form.value)">

答案 2 :(得分:4)

基于对答案的评论:

  

这不会检测到所有事件。例如,不是箭头键或转义。但你可以使用(keydown)来获取所有这些。

使所有事件都退格和删除或任何键的最佳解决方案,只需使用(输入)

<input type=text (input)="eventHandler($event.keyCode)">

eventHandler(keyCode) {...}

答案 3 :(得分:1)

2020更新:

event.keyCode已过时,您应改用event.code(只需先检查浏览器的兼容性)

<input type=text (keypress)="eventHandler($event)">

eventHandler(event: KeyboardEvent) {
   console.log('Key pressed is:', event.code);
}

event.keyCode的弃用:

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode

event.code浏览器兼容性:

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code#Browser_compatibility