Angular:将鼠标移离组件时不再触发事件侦听器

我的Angular应用程序中有一个上下文菜单,我想在打开上下文菜单时每按一个键就触发一次回调。我在上下文菜单的构造函数中添加了以下代码:

window.addEventListener('keydown',function() {
  console.log('keys pressed');
});

如果打开上下文菜单,将光标悬停在其上,然后按一个键,它将成功触发此回调。但是,如果我将鼠标 off 移出菜单,则当我按下某个键时,它不再触发它。而且,即使我将鼠标移回菜单上方,它仍然没有响应。只要打开上下文菜单,无论光标在哪里,我都希望它在按下键时做出响应。

有什么想法吗?

zhouanneng 回答:Angular:将鼠标移离组件时不再触发事件侦听器

尝试一下

   @HostListener('document:keydown',['$event']) onKeydownHandler(event: KeyboardEvent) {
      console.log('keys pressed');
   }
,

您需要keyDown和click事件才能正确侦听上下文菜单事件。完整的代码可以在此StackBlitz Link

中找到

您的组件代码是..

contextmenu:boolean = false;
styleSelect: boolean = false;

clickMe(){
   this.contextmenu = !this.contextmenu;
   this.styleSelect === true ? this.styleSelect= false : '';
   document.addEventListener('keydown',this.scroll,false );
}

scroll = (e): void => {
     if (e.target.tagName === 'LI' ) {document.removeEventListener('mousedown',this.scroll); }
     if (this.contextmenu === true) {
        this.contextmenu = false;
        this.styleSelect = true;
        document.removeEventListener('keydown',this.scroll);
     }
 }

 close(){
   this.contextmenu = false;
 }
本文链接:https://www.f2er.com/2955426.html

大家都在问