angular - 打开第二个时关闭下拉菜单/document.click被点击Angular 5阻止

标签 angular domdocument angular2-directives angular-directive

我正在尝试为下拉菜单创建一个指令,只要我使用单个指令,它就像一个魅力。我可以使用以下代码在下拉菜单外发现点击:

@HostListener('document:click', ['$event'])
  onDocumentClick(event: any): void {
    console.log("document click");
    // close
}
@HostListener('click')
  onClick(): void {
    console.log('click on ');  
    // toggle  
  }

当创建了 2 个下拉菜单时会出现问题。我想在打开第二个下拉菜单时关闭第一个下拉菜单,但是当我单击第二个下拉菜单时,只会触发“click”事件并且“document.click”不会被执行。我希望这两个事件都应该发生,除非我在点击时明确使用 preventDefault 但显然这是自动发生的。

Angular 5 中打开第二个下拉菜单时关闭第一个下拉菜单的正确方法应该是什么?

最佳答案

也许你可以尝试这样的事情:

 @HostListener('document:click', ['$event'])
  onClick(event) {
    if(this.eRef.nativeElement.contains(event.target)) {
      // toggle logic
    } else {
      // close logic
    }
}

因此,不是让两个事件相互冲突,而是让一个事件包含两个逻辑片段来准确处理您需要的内容,具体取决于您是在元素本身内部还是外部单击。说得通?

这取自 here

关于angular - 打开第二个时关闭下拉菜单/document.click被点击Angular 5阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47692045/

相关文章:

javascript - *ng如果 Angular 没有绑​​定正确的值

javascript - ionic 2/Angular 2 - 无法将数据从 Google Maps InfoWindow 传递到页面

java - 如何从 Java 中的 XMLUnit 测试中删除属性?

angularjs - Angular 2 组件中 'controllerAs' 指令属性的模拟是什么?

angular - ngOnDestroy 可以在 ngAfterContentInit 之前发生吗?

file - Angular2 中静态文件的默认路径是什么?

node.js - Angular 4 - 检测 http 请求的连接问题

php - HTML 标签之间内容的 XPath 查询

php - 如何将 HTML 插入到 PHP DOMNode?

javascript - css 属性在 ngFor 上的 Angular 4 中使用 ngStyle 应用于错误的元素