Creating a nested or multilevel accordion menu is a common requirement for complex mobile apps. In this tutorial, weβll walk through building a clean, responsive multilevel accordion menu using Ionic with Angular.
This post has been updated to use Ionic 8 and Angular 20. Letβs get started!
π Prerequisites
Before we dive in, make sure you have the following:
- Node.js and npm installed
- Ionic CLI installed (
npm install -g @ionic/cli
) - Basic knowledge of Angular and Ionic
βοΈ Step 1: Create a New Ionic Angular App
ionic start multilevel-accordion blank --type=angular
cd multilevel-accordion
π Step 2: Define the Accordion Menu Data
In home.page.ts:
menuItems = [
{
title: 'Menu 1',
expanded: false,
children: [
{
title: 'Submenu 1-1',
expanded: false,
children: [
{ title: 'Submenu 1-1-1' },
{ title: 'Submenu 1-1-2' }
]
},
{
title: 'Submenu 1-2'
}
]
},
{
title: 'Menu 2',
expanded: false,
children: [
{ title: 'Submenu 2-1' },
{ title: 'Submenu 2-2' }
]
}
];
π§ Step 3: Create the Recursive Accordion Component
β Generate the component:
ionic generate component accordion
βοΈ accordion.component.ts
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-accordion',
templateUrl: './accordion.component.html',
styleUrls: ['./accordion.component.scss']
})
export class AccordionComponent {
@Input() items: any[] = [];
toggle(item: any) {
item.expanded = !item.expanded;
}
}
π§Ύ accordion.component.html
<ion-list *ngFor="let item of items">
<ion-item (click)="toggle(item)">
{{ item.title }}
<ion-icon
[name]="item.expanded ? 'chevron-down' : 'chevron-forward'"
slot="end"
*ngIf="item.children"
></ion-icon>
</ion-item>
<div *ngIf="item.expanded && item.children" class="sub-menu">
<app-accordion [items]="item.children"></app-accordion>
</div>
</ion-list>
π accordion.component.scss
.sub-menu {
padding-left: 20px;
border-left: 2px solid #ccc;
}
π Step 4: Use the Accordion in Home Page
<ion-header>
<ion-toolbar>
<ion-title>
Accordion Menu
</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<app-accordion [items]="menuItems"></app-accordion>
</ion-content>
π Step 5: Add Component to Module
In app.module.ts or home.module.ts:
import { AccordionComponent } from '../components/accordion/accordion.component';
@NgModule({
declarations: [AccordionComponent],
exports: [AccordionComponent]
})
β Final Result
You now have a working multilevel accordion menu in your Ionic Angular app, fully expandable with infinite nesting via recursion.
π Original Tutorial
This post was originally published on Djamware:
π Build a Multilevel Accordion Menu in Ionic with Angular
π¬ Questions?
Let me know in the comments if you have any questions or improvements!
Top comments (0)