event typescript angular keypress key-bindings

typescript - event - keyup angular 5



¿Cómo puedo escuchar el evento de pulsación de tecla en toda la página? (4)

La respuesta de yurzui no funcionó para mí, podría ser una versión RC diferente, o podría ser un error de mi parte. De cualquier manera, así es como lo hice con mi componente en Angular2 RC4 (que ahora está bastante desactualizado).

@Component({ ... host: { ''(document:keydown)'': ''handleKeyboardEvents($event)'' } }) export class MyComponent { ... handleKeyboardEvents(event: KeyboardEvent) { this.key = event.which || event.keyCode; } }

Estoy buscando una manera de vincular una función a toda mi página (cuando un usuario presiona una tecla, quiero que active una función en mi component.ts)

Fue fácil en AngularJS con ng-keypress pero no funciona con (keypress)="handleInput($event)" .

Lo probé con un contenedor div en toda la página, pero no parece funcionar. solo funciona cuando el foco está en él.

<div (keypress)="handleInput($event)" tabindex="1">


Si desea realizar cualquier evento en cualquier botón específico del teclado, presione, en ese caso, puede usar @HostListener. Para esto, debe importar HostListener en su archivo ts componente.

importar {HostListener} desde ''@ angular / core'';
luego use la siguiente función en cualquier parte del archivo ts de su componente.

@HostListener(''document:keyup'', [''$event'']) handleDeleteKeyboardEvent(event: KeyboardEvent) { if(event.key === ''Delete'') { // remove something... } }


Solo para agregar a esto en 2019 w Angular 8,

en lugar de presionar teclas tuve que usar keydown

@HostListener(''document:keypress'', [''$event''])

a

@HostListener(''document:keydown'', [''$event''])


@HostListener decorador @HostListener dentro de su componente:

import { HostListener } from ''@angular/core''; @Component({ ... }) export class AppComponent { @HostListener(''document:keypress'', [''$event'']) handleKeyboardEvent(event: KeyboardEvent) { this.key = event.key; } }

También hay otras opciones como:

propiedad de host dentro de @Component decorator

Angular recomienda usar el decorador @HostListener sobre la propiedad del host 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(); } }