Integrate treeview inside the accordion in EJ2 TypeScript Accordion control
2 May 20235 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 { Accordion, TreeView } from '@syncfusion/ej2-navigations';
import { DocDB, DownloadDB, PicDB} from 'datasource.ts'
//Initialize Accordion component
let acrdnObj: Accordion = new Accordion({
expanding: expand,
width: 400,
items : [
{ header: 'Documents', expanded: true, content: '<div id="treeDoc"></div>' },
{ header: 'Downloads', content : '<div id="treeDownload"></div>' },
{ header: 'Pictures', content: '<div id="treePic"></div>' },
]
});
//Render initialized Accordion component
acrdnObj.appendTo('#element');
//Expanding Event function for Accordion component.
function expand(e: ExpandEventArgs): void {
if (e.name === 'expanding' && [].indexOf.call(this.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.name === 'expanding' && [].indexOf.call(this.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.name === 'expanding' && [].indexOf.call(this.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');
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Essential JS 2 Accordion</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript Toolbar Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/23.1.36/material.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>LOADING....</div>
<div id='container'>
<div id='element'></div>
<br/><br/>
<div id='result'></div>
</div>
</body>
</html>