В Angular есть несколько способов реализации закрытия Sidebar при клике вне его области.
Один из способов - это добавление обработчика события click
на элемент document
и проверка, является ли целью клика элемент вне Sidebar. Для этого можно использовать директиву.
1. Создайте новую директиву с помощью команды ng generate directive clickOutside
.
ng generate directive clickOutside
2. Откройте файл click-outside.directive.ts
и замените его содержимое следующим кодом:
import { Directive, ElementRef, Output, EventEmitter, HostListener } from '@angular/core'; @Directive({ selector: '[clickOutside]' }) export class ClickOutsideDirective { constructor(private elementRef: ElementRef) {} @Output() clickOutside: EventEmitter<any> = new EventEmitter(); @HostListener('document:click', ['$event.target']) public onClick(targetElement: any): void { const clickedInside = this.elementRef.nativeElement.contains(targetElement); if (!clickedInside) { this.clickOutside.emit(null); } } }
3. Теперь вы можете использовать директиву clickOutside
в вашем компоненте, где находится Sidebar.
<div class="sidebar" clickOutside (clickOutside)="closeSidebar()"> <!-- код сайдбара --> </div>
В данном примере при клике вне области Sidebar вызывается метод closeSidebar()
, который выполняет необходимые действия для закрытия Sidebar.
4. В вашем компоненте, где находится Sidebar, добавьте метод closeSidebar()
:
closeSidebar(): void { // Здесь выполняйте необходимые действия по закрытию Sidebar }
Теперь при клике вне области Sidebar будет вызываться метод closeSidebar()
, что позволит вам реализовать логику закрытия Sidebar. Убедитесь, что прописаны нужные стили для сайдбара, чтобы он закрывался.