vorrei utilizzare @HostListener decoratore in un componente:
import { HostListener } from '@angular/core';
@Component({
...
})
export class AppComponent {
@HostListener('document:keypress', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
this.key = event.key;
}
}
Ci sono anche altre opzioni come:
proprietà ospite entro @Component
decoratore
angolare raccomandano utilizzando @HostListener
decoratore su host property https://angular.io/guide/styleguide#style-06-03
@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();
}
}
Werking fine. import {HostListener} da '@ angular/core' deve aggiungere. e chiama anche ovunque nel componente. Perfetto anche per i controtenori laterali – gnganpath
Grazie per questo, ma solo per i futuri lettori: se hai bisogno dei tasti freccia, usa keydown anziché keypress. –
Se è necessaria la chiave 'esc', utilizzare l'evento' keyup'. Grazie a @TroelsLarsen –