Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angular 2中特定于组件的HostListener_Javascript_Angular_Typescript - Fatal编程技术网

Javascript angular 2中特定于组件的HostListener

Javascript angular 2中特定于组件的HostListener,javascript,angular,typescript,Javascript,Angular,Typescript,我正在Angular 2中开发一个应用程序,其中有一个父组件和子组件。子组件有一个keydown事件的HostListener并执行一些功能。我能够实现这一点,但问题是,如果我在父组件的上下文中按下任何键,那么HostListener也会执行。如果我在子组件的上下文中,我希望执行HostListener 这不是我想要的。 它位于子组件中 @HostListener('keydown', ["$event"]) ondropdown(){ functionality } 这是

我正在Angular 2中开发一个应用程序,其中有一个父组件和子组件。子组件有一个keydown事件的HostListener并执行一些功能。我能够实现这一点,但问题是,如果我在父组件的上下文中按下任何键,那么HostListener也会执行。如果我在子组件的上下文中,我希望执行HostListener

这不是我想要的。 它位于子组件中

@HostListener('keydown', ["$event"])
ondropdown(){ functionality }
这是工作,但在整个页面上,我甚至尝试'窗口',但效果是一样的

@HostListener('document:keydown', ["$event"])
ondropdown(){ //functionality }

在我看来,你有一个冒泡。在这种情况下,您应该停止从子组件到父组件的事件冒泡,并防止从父组件到子组件的默认事件

对于儿童:

  @HostListener('keydown', ["$event"])
    ...
      event.stopPropagation();
    }
对于家长:

  @HostListener('keydown', ["$event"])
    ...
      event.preventDefault();
    }

在父组件的上下文中,您所说的
是什么意思?关键侦听器通常根据焦点所在的位置触发。如何确定焦点是否在宿主元素上?是的,在没有任何焦点的情况下,我觉得它只会全局触发,几乎与文档侦听器一样。