我正在寻找一种将功能绑定(bind)到整个页面的方法(当用户按下某个键时,我希望它触发我的component.ts中的功能)
在AngularJS中使用ng-keypress
很容易,但不适用于(keypress)="handleInput($event)"
。
我在整个页面上使用div包装器进行了尝试,但似乎不起作用。
它只有在焦点对准它时才起作用。
<div (keypress)="handleInput($event)" tabindex="1">
最佳答案
我会在您的组件中使用@HostListener装饰器:
import { HostListener } from '@angular/core';
@Component({
...
})
export class AppComponent {
@HostListener('document:keypress', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
this.key = event.key;
}
}
还有其他选项,例如:
@Component
装饰器中的主机属性Angular建议在主机属性https://angular.io/guide/styleguide#style-06-03上使用
@HostListener
装饰器@Component({
...
host: {
'(document:keypress)': 'handleKeyboardEvent($event)'
}
})
export class AppComponent {
handleKeyboardEvent(event: KeyboardEvent) {
console.log(event);
}
}
renderer.listen
import { Component, Renderer2 } from '@angular/core';
@Component({
...
})
export class AppComponent {
globalListenFunc: Function;
constructor(private renderer: Renderer2) {}
ngOnInit() {
this.globalListenFunc = this.renderer.listen('document', 'keypress', e => {
console.log(e);
});
}
ngOnDestroy() {
// remove listener
this.globalListenFunc();
}
}
Observable.fromEvent
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromEvent';
import { Subscription } from 'rxjs/Subscription';
@Component({
...
})
export class AppComponent {
subscription: Subscription;
ngOnInit() {
this.subscription = Observable.fromEvent(document, 'keypress').subscribe(e => {
console.log(e);
})
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
关于typescript - 如何在整个页面上监听按键事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37362488/