Чтобы скрыть элемент div при нажатии снаружи в приложении Angular, вы можете реализовать различные методы. Вот несколько возможных подходов:
- Прослушиватель событий документа: добавьте прослушиватель событий щелчка к объекту документа и проверьте, находится ли целевой элемент за пределами элемента 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
}
}
- 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
}
}
- Глобальная служба событий. Создайте глобальную службу событий, которая генерирует события при щелчке мыши. Подпишитесь на эти события в компоненте, содержащем элемент 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
}
}
Это всего лишь несколько стратегий для достижения желаемой функциональности. Выберите тот, который лучше всего соответствует структуре и требованиям вашего приложения.