Detect click outside Angular component Detect click outside Angular component angular angular

Detect click outside Angular component


import { Component, ElementRef, HostListener, Input } from '@angular/core';@Component({  selector: 'selector',  template: `    <div>      {{text}}    </div>  `})export class AnotherComponent {  public text: String;  @HostListener('document:click', ['$event'])  clickout(event) {    if(this.eRef.nativeElement.contains(event.target)) {      this.text = "clicked inside";    } else {      this.text = "clicked outside";    }  }  constructor(private eRef: ElementRef) {    this.text = 'no clicks yet';  }}

A working example - click here


An alternative to AMagyar's answer. This version works when you click on element that gets removed from the DOM with an ngIf.

http://plnkr.co/edit/4mrn4GjM95uvSbQtxrAS?p=preview

  private wasInside = false;    @HostListener('click')  clickInside() {    this.text = "clicked inside";    this.wasInside = true;  }    @HostListener('document:click')  clickout() {    if (!this.wasInside) {      this.text = "clicked outside";    }    this.wasInside = false;  }