Angular 当在具有侦听器的组件顶部打开模式时,@HostListener是否忽略?

Angular 当在具有侦听器的组件顶部打开模式时,@HostListener是否忽略?,angular,Angular,我正在使用主机侦听器侦听一个关键事件@HostListener('window:keyup',['$event'])…是否有某种方法可以不侦听“window”,而是在该组件是顶级组件时侦听,也就是说,如果在具有主机侦听器的组件顶部有一个模式打开,我不想侦听keyup @HostListener('window:keyup', ['$event']) keyEvent(event: KeyboardEvent) { if (event.keyCode === 27) {

我正在使用主机侦听器侦听一个关键事件
@HostListener('window:keyup',['$event'])…
是否有某种方法可以不侦听“window”,而是在该组件是顶级组件时侦听,也就是说,如果在具有主机侦听器的组件顶部有一个模式打开,我不想侦听keyup

@HostListener('window:keyup', ['$event'])
  keyEvent(event: KeyboardEvent) {
    if (event.keyCode === 27) {
        if (this.isOpen) {
            this.escape.emit();
        }  
    }
}

编辑:我在模态组件中使用它。但有时我会在一个模态上打开一个模态,我不想全部关闭…

我找不到更好的主机侦听器目标,只是添加了一个if语句来检查模态的z值

@HostListener('window:keyup', ['$event'])
  keyEvent(event: KeyboardEvent) {
    if (event.keyCode === 27) {        
        if (this.isOpen && this.$modal[0].style.zIndex === (Modal.zIndex).toString()) {
            this.escape.emit();
        }  
    }
}

如果您使用的是
ngx引导
模式组件,则可以使用
isShown
属性并将
模式组件
作为
查看子对象
参考,如下所示,以获得您的结果

@ViewChild('childModal') childModal :ModalDirective;


@HostListener('window:keyup', ['$event'])
keyEvent(event: KeyboardEvent) {
    if (event.keyCode === 27) {
        if (!this.childModal.isShown) {
            console.log('something logged')
        }  
    }
}

您可以添加更多代码吗。您的
@HostListener
代码在组件或指令中的何处?不要使用
window:keyup
你应该听
keyup
并把它放在组件中的一个指令中。为什么它在组件中?你所说的指令是什么意思?看看这个