Скрыть Div при нажатии снаружи в Angular

Чтобы скрыть элемент div при нажатии снаружи в приложении Angular, вы можете реализовать различные методы. Вот несколько возможных подходов:

  1. Прослушиватель событий документа: добавьте прослушиватель событий щелчка к объекту документа и проверьте, находится ли целевой элемент за пределами элемента div, который вы хотите скрыть. Вы можете использовать сервис Renderer2для взаимодействия с DOM. Когда щелчок происходит за пределами элемента div, вы можете установить флаг или вызвать функцию, чтобы скрыть элемент div.
import { Component, ElementRef, Renderer2, HostListener } from '@angular/core';
@Component({
  selector: 'app-your-component',
  template: `
    <div #divToHide></div>
    <button (click)="toggleDiv()">Toggle Div</button>
  `,
})
export class YourComponent {
  @ViewChild('divToHide') divToHide: ElementRef;
  constructor(private renderer: Renderer2) {}
  ngOnInit() {
    this.renderer.listen('document', 'click', (event) => {
      if (!this.divToHide.nativeElement.contains(event.target)) {
        // Hide the div here
      }
    });
  }
  toggleDiv() {
    // Toggle the visibility of the div here
  }
}
  1. HostListener: используйте декоратор HostListener, чтобы прослушивать события кликов на главном элементе и проверять, находится ли целевой элемент за пределами элемента div.
import { Component, ElementRef, HostListener } from '@angular/core';
@Component({
  selector: 'app-your-component',
  template: `
    <div #divToHide></div>
    <button (click)="toggleDiv()">Toggle Div</button>
  `,
})
export class YourComponent {
  @ViewChild('divToHide') divToHide: ElementRef;
  @HostListener('document:click', ['$event'])
  onClick(event: MouseEvent) {
    if (!this.divToHide.nativeElement.contains(event.target)) {
      // Hide the div here
    }
  }
  toggleDiv() {
    // Toggle the visibility of the div here
  }
}
  1. Глобальная служба событий. Создайте глобальную службу событий, которая генерирует события при щелчке мыши. Подпишитесь на эти события в компоненте, содержащем элемент div, и проверьте, находится ли целевой элемент за пределами элемента div.
import { Component, ElementRef } from '@angular/core';
import { GlobalEventService } from 'path-to-global-event-service';
@Component({
  selector: 'app-your-component',
  template: `
    <div #divToHide></div>
    <button (click)="toggleDiv()">Toggle Div</button>
  `,
})
export class YourComponent {
  @ViewChild('divToHide') divToHide: ElementRef;
  constructor(private globalEventService: GlobalEventService) {}
  ngOnInit() {
    this.globalEventService.clickEvent$.subscribe((event: MouseEvent) => {
      if (!this.divToHide.nativeElement.contains(event.target)) {
        // Hide the div here
      }
    });
  }
  toggleDiv() {
    // Toggle the visibility of the div here
  }
}

Это всего лишь несколько стратегий для достижения желаемой функциональности. Выберите тот, который лучше всего соответствует структуре и требованиям вашего приложения.