Set the nested accordion in Angular Accordion component
22 Sep 202510 minutes to read
Nested Accordions allow hierarchical organization of content within the Syncfusion Angular Accordion component, enabling multi-level expandable sections for applications like navigation menus, FAQs, or data trees. Render a child Accordion inside the content area of a parent Accordion item using Angular’s ng-template
. This approach integrates the nested Accordion with full functionality, including expand/collapse behavior.
To set up nested Accordions, ensure the @syncfusion/ej2-angular-navigations
package is installed and imported. Use ng-template
inside each e-accordionitem
tag with the #content
attribute to define the item’s content area. Then, apply ng-template
with a select attribute referencing an ID or class to map the nested content. Note that ng-template
is an Angular core directive and requires no additional imports.
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { AccordionModule } from '@syncfusion/ej2-angular-navigations'
import { Component, ViewChild } from '@angular/core';
import { AccordionComponent } from '@syncfusion/ej2-angular-navigations';
import { ExpandEventArgs, Accordion, AccordionClickArgs} from '@syncfusion/ej2-navigations';
@Component({
imports: [
AccordionModule
],
standalone: true,
selector: 'app-container',
template: `
<ejs-accordion>
<e-accordionitems>
<e-accordionitem expanded="true">
<ng-template #header>
<div>Video</div>
</ng-template>
<ng-template #content>
<ejs-accordion>
<e-accordionitems>
<e-accordionitem>
<ng-template #header>
<div>Video Track 1</div>
</ng-template>
</e-accordionitem>
<e-accordionitem>
<ng-template #header>
<div>Video Track 2</div>
</ng-template>
</e-accordionitem>
</e-accordionitems>
</ejs-accordion>
</ng-template>
</e-accordionitem>
<e-accordionitem>
<ng-template #header>
<div>Music</div>
</ng-template>
<ng-template #content>
<ejs-accordion>
<e-accordionitems>
<e-accordionitem>
<ng-template #header>
<div>Music Track 1</div>
</ng-template>
</e-accordionitem>
<e-accordionitem>
<ng-template #header>
<div>Music Track 2</div>
</ng-template>
</e-accordionitem>
<e-accordionitem>
<ng-template #header>
<div>Music New</div>
</ng-template>
<ng-template #content>
<ejs-accordion>
<e-accordionitems>
<e-accordionitem>
<ng-template #header>
<div>New Track 1</div>
</ng-template>
</e-accordionitem>
<e-accordionitem>
<ng-template #header>
<div>New Track 2</div>
</ng-template>
</e-accordionitem>
</e-accordionitems>
</ejs-accordion>
</ng-template>
</e-accordionitem>
</e-accordionitems>
</ejs-accordion>
</ng-template>
</e-accordionitem>
<e-accordionitem>
<ng-template #header>
<div>Images</div>
</ng-template>
<ng-template #content>
<ejs-accordion>
<e-accordionitems>
<e-accordionitem>
<ng-template #header>
<div>Track 1</div>
</ng-template>
</e-accordionitem>
<e-accordionitem>
<ng-template #header>
<div>Track 2</div>
</ng-template>
</e-accordionitem>
</e-accordionitems>
</ejs-accordion>
</ng-template>
</e-accordionitem>
</e-accordionitems>
</ejs-accordion>
`
})
export class AppComponent {
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));