首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测子组件外部单击的简单方法

问检测子组件外部单击的简单方法
EN

Stack Overflow用户
提问于 2019-03-06 14:19:50
回答 1查看 1.1K关注 0票数 2

我希望根据变量的值展开和收缩子div组件,但是我希望能够单击该组件(在同级的父组件中)并折叠它。

下面是一个stackblitz示例。我试图从我在HostListener中找到的东西中使用这个问题,但这无助于我的情况。

代码语言:javascript
复制
 @HostListener('document:click', ['$event'])
    documentClick(event: MouseEvent) {
        // your click logic
    }

目标:

  1. 当我单击子组件(hello)时,我希望它在尚未展开时展开,如果已经展开,则希望它收缩。
  2. 当我点击其他任何东西时。(父组件或同级组件),如果展开子组件(hello),我希望它收缩。

我不希望在单击父/兄弟关系时扩展子组件(hello)。

更新:使用HostListener

hello.component.html

代码语言:javascript
复制
<div class="box" (click)="clicked()" [ngClass]="{large: isEnlarged}">Hello.component</div>

hello.component.ts

代码语言:javascript
复制
export class HelloComponent  {
  isEnlarged = false;

  clicked() {
    this.isEnlarged = !this.isEnlarged;
  }

  @HostListener('document:click', ['$event'])
  documentClick(event: MouseEvent) {
    console.log('clicked');
    this.isEnlarged = false;
  }
}

app.component

代码语言:javascript
复制
export class AppComponent  {

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 14:39:28

问题是您的单击处理程序在文档单击事件处理程序将其设置为false之前将expanded设置为true,因此始终为false。

只有当事件目标不是您的组件时,才能将其设置为false:

https://stackblitz.com/edit/mouse-click-anywhere-8bwg6p?file=src/app/hello.component.ts

代码语言:javascript
复制
  @HostListener('document:click', ['$event'])
  documentClick(event: MouseEvent) {
    console.log('clicked');
    console.log(event);
    if (event.target.id !== 'box') {
      this.isEnlarged = false;
    }
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55025271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档