如何通过 angular 检查空格键事件?
How to check for spacebar key event via angular?
我有一个 angular 模板,其中使用了以下语法:
(click)="dosomething()"
效果很好。我现在需要在 return 或 space 栏上触发相同的事件。我为 return 添加了这个:
(keyup.return)="dosomething()"
这也很好用。
达到 spacebar 但我无法让它工作。我都试过了...
(keyup.space)="dosomething()"
...以及...
(keyup.spacebar)="dosomething()"
...但两者都不起作用。在这两种情况下,按 space 只是默认浏览器行为并向下滚动页面。
keyup 甚至似乎是记录在案的解决方案(至少就我所能找到的而言),所以我很困惑我在这里可能遗漏了什么。
要达到预期结果,请使用 (keyup.Space)
而不是 (keyup.space)
('S' 大写)
<input (keyup.Space)= "doSomething()">
供参考的工作代码示例- https://stackblitz.com/edit/angular-dmvr52?file=src/app/app.component.html
您可以在组件而不是 html 模板中执行此操作:
import { Component, HostListener } from '@angular/core';
@Component({
selector: 'app-page-viewer',
templateUrl: './page-viewer.component.html',
styleUrls: ['./page-viewer.component.css']
})
export class PageViewerComponent implements OnInit, OnDestroy {
@HostListener('document:keyup', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
switch (event.key) {
case 'ArrowLeft':
// trigger something from the left arrow
break;
case 'ArrowRight':
// trigger something from the right arrow
}
constructor(){}
}
尽管这是一个老问题,但这是我的搜索返回的第一个 Google 结果。所以我想post一个可能对找到它的人有帮助的答案。
诀窍是使用 keydown,因此您可以在 space 键发生默认操作之前阻止它。如果您使用 keyup,则默认操作已经发生。
您可以在 HTML 模板或 TypeScript 中使用 preventDefault。我更喜欢在 HTML 模板中这样做,因为它很容易让您仅在需要时在 keydown.space 事件侦听器中使用 preventDefault。
在 HTML 模板中使用 preventDefault()
HTML:
(keydown.space)="doSomething(); $event.preventDefault()"
在 TypeScript 中使用 preventDefault()
HTML:
(keydown.space)="doSomething($event)"
TS:
doSomething(event: Event): void {
window.alert('You did something');
event.preventDefault();
}
我有一个 angular 模板,其中使用了以下语法:
(click)="dosomething()"
效果很好。我现在需要在 return 或 space 栏上触发相同的事件。我为 return 添加了这个:
(keyup.return)="dosomething()"
这也很好用。
达到 spacebar 但我无法让它工作。我都试过了...
(keyup.space)="dosomething()"
...以及...
(keyup.spacebar)="dosomething()"
...但两者都不起作用。在这两种情况下,按 space 只是默认浏览器行为并向下滚动页面。
keyup 甚至似乎是记录在案的解决方案(至少就我所能找到的而言),所以我很困惑我在这里可能遗漏了什么。
要达到预期结果,请使用 (keyup.Space)
而不是 (keyup.space)
('S' 大写)
<input (keyup.Space)= "doSomething()">
供参考的工作代码示例- https://stackblitz.com/edit/angular-dmvr52?file=src/app/app.component.html
您可以在组件而不是 html 模板中执行此操作:
import { Component, HostListener } from '@angular/core';
@Component({
selector: 'app-page-viewer',
templateUrl: './page-viewer.component.html',
styleUrls: ['./page-viewer.component.css']
})
export class PageViewerComponent implements OnInit, OnDestroy {
@HostListener('document:keyup', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
switch (event.key) {
case 'ArrowLeft':
// trigger something from the left arrow
break;
case 'ArrowRight':
// trigger something from the right arrow
}
constructor(){}
}
尽管这是一个老问题,但这是我的搜索返回的第一个 Google 结果。所以我想post一个可能对找到它的人有帮助的答案。
诀窍是使用 keydown,因此您可以在 space 键发生默认操作之前阻止它。如果您使用 keyup,则默认操作已经发生。
您可以在 HTML 模板或 TypeScript 中使用 preventDefault。我更喜欢在 HTML 模板中这样做,因为它很容易让您仅在需要时在 keydown.space 事件侦听器中使用 preventDefault。
在 HTML 模板中使用 preventDefault()
HTML:
(keydown.space)="doSomething(); $event.preventDefault()"
在 TypeScript 中使用 preventDefault()
HTML:
(keydown.space)="doSomething($event)"
TS:
doSomething(event: Event): void {
window.alert('You did something');
event.preventDefault();
}