在Angular2应用程序中创建全局键盘快捷方式(即热键)的正确方式是什么?
假设起点是让“?”成为提示表并使“Alt + s”提交表单。
我应该将“?”映射到主组件,然后开发属性指令,该指令应用于应对特定热键的那些组件,但是-如何防止输入字段响应“?”。
在Angular2应用程序中创建全局键盘快捷方式(即热键)的正确方式是什么?
假设起点是让“?”成为提示表并使“Alt + s”提交表单。
我应该将“?”映射到主组件,然后开发属性指令,该指令应用于应对特定热键的那些组件,但是-如何防止输入字段响应“?”。
<div (window:keydown)="doSomething($event)">click me<div>
在您的组件中调用此方法
doSomething($event) {
// read keyCode or other properties
// from event and execute a command
}
在主机组件本身上进行监听
@Component({
selector: 'app-component',
host: { '(window:keydown)': 'doSomething($event)' },
})
class AppComponent {
doSomething($event) {
...
}
}
或者使用等效的语法
@Component({
selector: 'app-component',
})
class AppComponent {
@HostListener('window:keydown', ['$event'])
doSomething($event) {
...
}
}
constructor(private _hotkeysService: HotkeysService) {
this._hotkeysService.add(new Hotkey('meta+shift+g', (event: KeyboardEvent) => {
console.log('Typed hotkey');
return false; // Prevent bubbling
})); }
<button [angularHotKey]="[17,78]">New Document</button>
<!-- CTRL = 17 & n = 78 -->
现在在您的根组件中,监听按键并将它们用作全局热键服务中元素的索引。获取引用后,执行以下操作。
我假设您已经以这种格式格式化了记录的键码= 1-23-32-...,不要忘记在添加到服务中的键对数组时以升序/降序格式进行排序,在检查时也是如此。
if(this.keypair[combo].length)this.keypair[combo].click();
this.keypair[combo]
包含了添加了 angularHotKey指令
的元素的引用。
更多注意事项:
1.) 在 angularHotKey
指令中添加新的键值对和元素/可点击的引用时,请检查是否存在与相同组合的配对,如果有,请抛出异常。这将有助于调试,并防止您犯愚蠢的错误。在 Angular 2 组件类中,在 ngOnDestroy 方法中定义一个逻辑来删除所有与其子元素配对的快捷键。
请访问 http://keycode.info/ 获取键盘上所有类型按键的键码。
JavaScript多个键同时按下 一个包含有关如何处理组合键按下的每一个细节的答案。
(window:keydown.?)
不支持?
。可能只支持在 https://github.com/angular/angular/blob/630d93150a58581a0d474ebf1befb5d09b6813c5/modules/angular2/src/platform/browser/browser_adapter.dart 中列出的代码。 - Günter ZöchbauerHostListener
,我只是犯了个错误。 - Günter Zöchbauer