我试图跟踪用户使用键盘按Shift + Tab键组合键,但我无法触发该事件
@HostListener('keyup', ['$event'])
@HostListener('keydown', ['$event'])
onkeyup(event) {
if (event.keyCode == 16 && event.keyCode == 9) {
this.isShift = true;
console.log("On Keyup " + event.keyCode);
}
}
onkeydown(event) {
console.log("On KeyDown" + event.keyCode);
}
答案 0 :(得分:6)
当我这样做时它起作用:
@Directive({
selector: '[test-directive]'
})
export class TestDirective {
@HostListener('keydown', ['$event']) onKeyDown(e) {
if (e.shiftKey && e.keyCode == 9) {
console.log('shift and tab');
}
}
}
<input type="text" test-directive />
请注意,keyup
可能会非常棘手,因为tab
可能会使元素失焦。因此,当keyup
触发时,您可能处于下一个元素,因此keyup
实际上可能触发该元素。所以这取决于你需要什么。但keydown
适用于当前元素。
答案 1 :(得分:1)
尽管弗兰克·莫迪卡(Frank Modica)的解决方案有效,但使用Angular's key event filtering and pseudo-events将是一种更具可读性和更简洁的解决方案:
@Directive({
selector: '[keyHandler]'
})
export class KeyHandlerDirective {
@HostListener('keydown.shift.tab', ['$event'])
onKeyDown(e) {
// optionally use preventDefault() if your combination
// triggers other events (moving focus in case of Shift+Tab)
// e.preventDefault();
console.log('shift and tab');
}
}
// in template:
<input type="text" keyHandler />
更多有关伪事件如何工作的示例here。