Все ваши элементы подменю расширяются при расширении родительского элемента, поскольку вы поддерживаете общий / единственный флаг для проверки, находится ли меню в расширенном состоянии или нет. Поэтому, когда вы раскрываете родительский элемент, расширенный флаг устанавливается в true, и все ваши пункты меню также расширяются. поэтому вместо поддержания общего флага вы можете поддерживать флаг для каждого элемента на карте. Вы можете добавить свойство id в свой список меню:
navItems: INavItem[] = [
{
id: 1,
displayName: 'Home',
iconName: 'fa-home fa-lg p-2',
route: 'home'
},
{
displayName: 'Settings',
id: 2,
iconName: 'fa-cog',
children: [
{
displayName: 'Navigation Management',
iconName: 'fa-sliders',
id: 3,
children: [
{
displayName: 'Navigation & Form Mapping',
id: 4,
iconName: 'fa-handshake-o',
route: 'navigation-form-mapping'
}]
}]
}]
Вы можете сохранить расширенное использование в качестве карты пар ключ-значение, обновив функцию onItemSelected следующим образом:
onItemSelected(item: INavItem) {
if (item.children && item.children.length) {
this.expanded[item.id] = !this.expanded[item.id];
}
}
И ваш html может быть обновлен как:
<span *ngIf="menu.children" class="fa fa-caret-down fa-2x pull-right" [@indicatorRotate]="expanded[menu.id] ? 'expanded': 'collapsed'">
</span>
<ul *ngIf="menu.children && expanded[menu.id]" id="nav{{menu.id}}">
<ng-container *ngTemplateOutlet="recursiveMenu; context:{ $implicit: menu.children }"></ng-container>
</ul>
Рабочая демоверсия