Я работаю над компонентом навигации, в котором есть несколько событий щелчка, и мне нужна ваша помощь:)
В моем HTML
<ul class="nav-right">
<li (click)="toggleDropdown('item1')" (clickOutside)="clickEvent($event)">
<span class="selector">
my Selector
</span>
<ul *ngIf="isActive('item1')">
<li *ngFor="let value of values">
{{city.name}}
</li>
</ul>
</li>
<li (click)="toggleDropdown('other')" (clickOutside)="clickEvent($event)">
<span class="selector">
Other
</span>
<ul *ngIf="isActive('other')">
<li *ngFor="let otherValue of otherValues">
{{otherValue.name}}
</li>
</ul>
</li>
Тогда В моем компоненте у меня есть пара событий для переключения между компонентами
toggleDropdown(menu: any) {
this.activeMenu = this.activeMenu === menu ? 0 : menu;
}
isActive(menu: string): boolean {
return this.activeMenu === menu;
}
И, наконец, я использую директиву для обнаружения кликов за пределами nav
@Directive({ selector: '[clickOutside]' })
export class ClickOutsideDirective {
@Output() clickOutside = new EventEmitter<MouseEvent>();
constructor(private elementRef: ElementRef) { }
@HostListener('document:click', ['$event'])
onDocumentClick(event: MouseEvent): void {
const targetElement = event.target as HTMLElement;
if (targetElement && !this.elementRef.nativeElement.contains(targetElement)) {
this.clickOutside.emit(event);
}
}
}
Моя проблема в том, что я не знаю, как проверить, нужно ли открывать нажатый элемент, потому что я щелкнул сам элемент. Я думаю, что эти события рухнут, но я не знаю, как их решить, я буду благодарен, если вы дадите мне подсказку.
Заранее спасибо!