Вы можете создать две изолированные логические переменные.
В сложном меню вы можете использовать * ngFor и реорганизовать ваше решение
.html файл
<ul>
<li *ngFor="let menuItem of menuList">
<a *ngIf="!menuItem.submenuItems" [routerLink]="menuItem.routerLink">{{menuItem.name}}</a>
<a *ngIf="menuItem.submenuItems"
(click)="menuItem.opened = !menuItem.opened"
routerLinkActive="active"
>
{{menuItem.name}}
</a>
<ul [@actionSubmenuShow]="menuItem.opened ? 'open' : 'closed'"
style="display: none;">
<li *ngFor="let submenuItem of menuItem.submenuItems">
<a [routerLink]="submenuItem.routerLink">{{submenuItem.name}}</a>
</li>
</ul>
</li>
</ul>
.ts file
public menuList = [
{
name: 'Dashboard',
routerLink: '/dashboard',
},
{
name: 'Books',
routerLink: '/books',
opened: false,
submenuItems: [
{
name: 'submenu1',
routerLink: '/books/submenu1'
},
{
name: 'submenu2',
routerLink: '/books/submenu2'
}
]
},
{
name: 'Tables',
routerLink: '/tables',
opened: false,
submenuItems: [
{
name: 'submenu3',
routerLink: '/tables/submenu3'
},
{
name: 'submenu4',
routerLink: '/tables/submenu4'
}
]
}
];