首页 > 解决方案 > 如何使用 HostListener 防止相同事件在不同组件中以角度传播?

问题描述

我有两个组件,它们都在听键盘输入。如果其中一个满足某个条件,那么我想防止在听完这些事件后发生任何其他操作。这是一个片段:

组件 1(全屏覆盖):

@HostListener("document:keydown", ["$event"])
public handleKeyboardEvent(event: KeyboardEvent): void {
    if (!this.isShow) {
        return;
    }
    event.preventDefault();
    event.stopPropagation();
    event.returnValue = false;
}

组件 2(对话框):

@HostListener("document:keydown.escape", ["$event"]) 
public onEscKeyUp(e: KeyboardEvent): void {
    this.dial.close();
}

因此,当显示叠加层时,如果有意义的话,我不希望关闭对话框。我有那个代码,但它不起作用。

标签: javascriptangularevents

解决方案


我已经想出了如何让它工作:

@HostListener("document:keydown", ["$event"])
public handleKeyboardEvent(event: KeyboardEvent): boolean
{
    if (!this.isShow)
    {
        return true;
    }
    event.stopImmediatePropagation();
    return false;
}

推荐阅读