вы можете сбросить состояние меню путем прослушивания события щелчка документа, в этом случае любое событие щелчка в меню должно запускать событие вы
и любое событие щелчка вне компонента меню resetToggle
будет запущено.
stopPropagation - это предотвращает запуск обработчика щелчка документа
menuItemClickHandler(e , index ) {
e.stopPropagation();
// something magical ?♂️✨
...
}
@HostListener("document:click") resetToggle() {
this.isMenuOpen=false;
}
Меню компонентов
export class MenusComponent {
menuslist = [1, 2, 3, 4, 5, 6, 7, 8];
@HostBinding('class.active') isMenuOpen: boolean = false;
constructor() { }
menuItemClickHandler(e, index) {
e.stopPropagation();
// something magical ?♂️✨
console.log(index);
this.toggle(e); // toggle menus after you click ?
}
// component click
@HostListener('click', ['$event']) click(e) {
e.stopPropagation();
}
@HostListener("document:click") resetToggle() {
this.isMenuOpen = false;
}
toggle(e) {
e.stopPropagation();
console.log('toggle')
this.isMenuOpen = !this.isMenuOpen;
}
}
шаблон компонента меню
<ul ngClass="{slide : isMenuOpen}">
<li *ngFor="let item of menuslist;let index=index" (click)="menuItemClickHandler($event,index)">
{{item}}
</li>
</ul>
Стиль меню будет переключать меню, чтобы скользить по основанию меню или выключать его. Открытое значение
:host {
display: block;
height: 50vh;
width: 200px;
background: #ccc;
margin-left: -300px;
transition: all 0.25s ease-in-out;
}
:host.active{
margin-left: 0
}
демонстрация стекаблиц ??