В Angular есть несколько способов реализации скрытия окна по клику вне его области. Один из наиболее распространенных и простых способов - использовать директиву.
Шаги для реализации данного функционала в Angular:
1. Создайте новый файл с расширением .directive.ts (например, clickOutside.directive.ts).
2. В этом файле определите новую директиву с помощью декоратора @Directive. Укажите селектор директивы и добавьте соответствующее имя в качестве тэга в компоненте, где вы хотите использовать эту директиву.
3. Внутри директивы определите конструктор, в котором внедрите в сервис ElementRef и EventEmitter. ElementRef позволяет получить доступ к DOM-элементу, на котором применяется данная директива, а EventEmitter позволит генерировать событие, когда пользователь кликает вне элемента.
4. Добавьте в конструкторе внешний слушатель события click на весь документ, используя метод nativeElement.addEventListener(). В этом слушателе проверьте, было ли событие сгенерировано внутри элемента, на котором применяется директива. Если нет, то генерируйте событие с помощью метода emit() и передавайте в качестве параметра true или объект со значениями, которые вам необходимо передать в компонент.
5. В компоненте, где вы используете данную директиву, добавьте слушатель события, чтобы обрабатывать событие, генерируемое директивой. В методе, привязанном к этому слушателю, выполните необходимые действия, например, скройте окно.
Пример кода для создания директивы:
import { Directive, ElementRef, Output, EventEmitter, HostListener } from '@angular/core'; @Directive({ selector: '[clickOutside]' }) export class ClickOutsideDirective { @Output() clickOutside: EventEmitter<boolean> = new EventEmitter(); constructor(private elementRef: ElementRef) {} @HostListener('document:click', ['$event.target']) public onClick(targetElement: any): void { const clickedInside = this.elementRef.nativeElement.contains(targetElement); if (!clickedInside) { this.clickOutside.emit(true); } } }
Пример кода для использования директивы в компоненте:
<div (clickOutside)="handleClickOutside($event)"> <!-- Код вашего окна --> </div>
import { Component } from '@angular/core'; @Component({ selector: 'app-your-component', template: './your-component.html' }) export class YourComponent { handleClickOutside(event: any): void { // Обработка события клика вне элемента // Здесь можно выполнить необходимые действия, например, скрыть или закрыть окно } }
В результате, при клике вне элемента, в компоненте будет вызываться метод handleClickOutside, который может содержать код для скрытия окна или производить другие необходимые операции.