Integrate treeview inside the accordion in Angular Accordion component
22 Mar 20236 minutes to read
Accordion supports to render other Essential JS 2 Components by using content property.
You can give content as an element string like below, for initializing the component.
content: '<div id="element"> </div>'
The other component can be rendered with the use of provided events, such as clicked
and expanding
.
The following procedure is to render a TreeView within the Accordion,
-
Import the
TreeView
module fromej2-navigations
, for adding TreeView. Please refer the TreeView initialization steps -
You can initialize the TreeView component in
expanding
event,
by getting the element and defining the required TreeView properties.
import { Component, ViewChild } from '@angular/core';
import { AccordionComponent } from '@syncfusion/ej2-angular-navigations';
import { Accordion, ExpandEventArgs, TreeView } from '@syncfusion/ej2-navigations';
import { DocDB, DownloadDB, PicDB } from './datasource.ts';
@Component({
selector: 'app-container',
template: `
<ejs-accordion #element (expanding)="expanded($event)">
<e-accordionitems>
<e-accordionitem expanded='true'>
<ng-template #header>
<div>Documents</div>
</ng-template>
<ng-template #content>
<div id="treeDoc"></div>
</ng-template>
</e-accordionitem>
<e-accordionitem>
<ng-template #header>
<div>Downloads</div>
</ng-template>
<ng-template #content>
<div id="treeDownload"></div>
</ng-template>
</e-accordionitem>
<e-accordionitem>
<ng-template #header>
<div>Pictures</div>
</ng-template>
<ng-template #content>
<div id="treePic"></div>
</ng-template>
</e-accordionitem>
</e-accordionitems>
</ejs-accordion>
`
})
export class AppComponent {
@ViewChild('element') acrdnInstance: AccordionComponent;
public expanded(e: ExpandEventArgs) {
if (e.isExpanded && [].indexOf.call(this.acrdnInstance.items, e.item) === 0 && e.element.querySelector('#treeDoc').childElementCount === 0) {
//Initialize TreeView component
let treeObj: TreeView = new TreeView({
fields: { dataSource: DocDB, id: 'nodeId', text: 'nodeText', child: 'nodeChild', iconCss: 'icon', imageUrl: 'image' },
sortOrder: 'Ascending'
});
//Render initialized TreeView component
treeObj.appendTo('#treeDoc');
}
if (e.isExpanded && [].indexOf.call(this.acrdnInstance.items, e.item) === 1 && e.element.querySelector('#treeDownload').childElementCount === 0) {
let treeObj: TreeView = new TreeView({
fields: { dataSource: DownloadDB, id: 'nodeId', text: 'nodeText', child: 'nodeChild', iconCss: 'icon', imageUrl: 'image' },
sortOrder: 'Ascending'
});
treeObj.appendTo('#treeDownload');
}
if (e.isExpanded && [].indexOf.call(this.acrdnInstance.items, e.item) === 2 && e.element.querySelector('#treePic').childElementCount === 0) {
let treeObj: TreeView = new TreeView({
fields: { dataSource: PicDB, id: 'nodeId', text: 'nodeText', child: 'nodeChild', iconCss: 'icon', imageUrl: 'image' },
sortOrder: 'Ascending'
});
treeObj.appendTo('#treePic');
}
}
ngAfterViewInit() {
}
}
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AccordionModule } from '@syncfusion/ej2-angular-navigations';
import { AppComponent } from './app.component';
/**
* Module
*/
@NgModule({
imports: [
BrowserModule, AccordionModule
],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { AppModule } from './app.module';
enableProdMode();
platformBrowserDynamic().bootstrapModule(AppModule);