Angular2创建全局键盘快捷键(又称热键)的方法是什么?

Angular2创建全局键盘快捷键(又称热键)的方法是什么?,angular,Angular,在Angular2应用程序中创建全局键盘快捷键(又称热键)的正确方法是什么 假设一个好的起点是开始工作:“?”表示备忘单,“Alt+s”表示提交表单 我是否应该以某种方式将“?”映射到主组件,然后开发属性指令,该指令将应用于那些应响应特定热键的组件,但是-我如何防止输入字段响应“?”您可以在模板中使用此语法 点击我 在组件中调用此方法 doSomething($event){ //读取键码或其他属性 //从事件并执行命令 } 侦听主机组件本身 @组件({ 选择器:“应用程序组件”, 主机:

在Angular2应用程序中创建全局键盘快捷键(又称热键)的正确方法是什么

假设一个好的起点是开始工作:“?”表示备忘单,“Alt+s”表示提交表单


我是否应该以某种方式将“?”映射到主组件,然后开发属性指令,该指令将应用于那些应响应特定热键的组件,但是-我如何防止输入字段响应“?”

您可以在模板中使用此语法

点击我
在组件中调用此方法

doSomething($event){
//读取键码或其他属性
//从事件并执行命令
} 
侦听主机组件本身

@组件({
选择器:“应用程序组件”,
主机:{(窗口:按键):'doSomething($event)},
})
类AppComponent{
doSomething($事件){
...
}
}
或者用这个等价的语法

@组件({
选择器:“应用程序组件”,
})
类AppComponent{
@HostListener('window:keydown',['$event']))
doSomething($事件){
...
}
}

您可以使用我创建的名为

它允许您创建如下热键:

constructor(private _hotkeysService: HotkeysService) {
  this._hotkeysService.add(new Hotkey('meta+shift+g', (event: KeyboardEvent) => {
    console.log('Typed hotkey');
    return false; // Prevent bubbling
}));  }

简单而优雅的解决方案如下所示:-

创建一个全局服务,它将存储带有可单击元素的快捷方式绑定。 注意:-使用Ngondestory,在组件被销毁时删除绑定

现在创建一个指令,它将像这样接受keycodes作为输入

<button [angularHotKey]="[17,78]">New Document</button>
<!-- CTRL = 17 & n = 78 -->
此.keypair[combo]
包含添加了
angularHotKey指令的元素的引用

进一步说明: 1.)在
angularHotKey
指令中添加新的密钥对和元素/可点击参考时,请检查是否不存在与同一组合的配对,如果是,则引发异常,这将有助于调试,并防止您犯愚蠢的错误,在angular2组件类中,在Ngondestory方法中,定义删除与其子元素配对的所有快捷方式的逻辑

访问获取键盘上所有类型键的键码


(window:keydown.?)不支持关于如何处理组合键按下的每一个小细节的答案。可能只有“我的键盘”中列出的代码“?”实际上是“Shift+/”,并且(窗口:keydown)单独捕获它们。我不确定从您的上一条评论中可以看出什么。这是一个问题还是一个澄清…?这是我的澄清尝试:通过键入“?”windows:keydown事件在我的测试示例中触发了两个键:16(用于shift)和191(必须用于“?”)。因此,似乎支持“?”。@GünterZöchbauer如何确定这是一个全局事件而不是一个常规输入事件?例如,我有一个表单或一个独立的输入,如果用户在那里输入,我仍然会得到全局事件。我尝试了这个库,但是当我构建时,我得到了语义错误,例如。。。node_modules/angular2 hotkeys/src/directives/hotke ys.directive.ts(11110):错误TS2304:找不到名称“ExtendedKeyboardEvent”。。。您可以按照本期github中的指南进行修复:您可以提交一个包含更多信息的问题吗?谢谢效果很好。但我是否可以将所有热键都放在一个角度服务中,或者它必须在@NickRichardson模块中?
if(this.keypair[combo].length)this.keypair[combo].click();