Tree view
Angular Bootstrap 5 Tree view plugin
MDB treeview plugin is used to show hierarchical information which starts from the root item and proceed to its children and their respective children. Each item besides the root has a parent and can have children.
The parent is the node which is higher in the hierarchy and the child the one that is lower. Siblings are items which have one and the same parent. Items can be expanded and collapsed.
Note: Read the API tab to find all available options and advanced customization
Basic example
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<mdb-treeview
textField="name"
childrenField="children"
[nodes]="data"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
];
};
Open on item click
Use a [openOnClick]
to define opening lists of treeview by click only on
the arrow or on the whole list item.
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<mdb-treeview
textField="name"
childrenField="children"
[nodes]="data"
[openOnClick]="false"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
];
};
Accordion
Use a [accordion]
input to enable or disable opening only one list at
the same level.
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<mdb-treeview
textField="name"
childrenField="children"
[nodes]="data"
[accordion]="true"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
];
};
Selectable
Use a [selectable]
input to set up checkboxes in every list item.
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<mdb-treeview
textField="name"
childrenField="children"
[nodes]="data"
[selectable]="true"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
expandId: 'expand-example-item',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
];
};
Expand
Expand your treeview to the particular list using the
expand(ID)
method.
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<button type="button" class="btn btn-primary" (click)="treeview.expand('expand-example-item')">
Expand first list
</button>
<mdb-treeview
#treeview="mdbTreeview"
textField="name"
childrenField="children"
[nodes]="data"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
expandId: 'expand-example-item',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
];
};
Collapse
Collapse your treeview using the collapse()
method.
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<button type="button" class="btn btn-primary" (click)="treeview.collapse()">
Collapse treeview
</button>
<mdb-treeview
#treeview="mdbTreeview"
textField="name"
childrenField="children"
[nodes]="data"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
collapsed: false,
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
collapsed: false,
children: [
{
name: 'Third-one',
collapsed: false,
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
collapsed: false,
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
};
Custom icons
Add icons to the list elements by pasting an icon code in the
icon
property.
Use a [rotationAngle]
input to define a rotation angle of nested
lists icons.
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
- Third-one
- Third-two
- Third-three
<mdb-treeview
textField="name"
childrenField="children"
[nodes]="data"
[rotationAngle]="'90'"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One', icon: 'fas fa-dot-circle' },
{ name: 'Two', icon: 'fas fa-dot-circle' },
{
name: 'Three',
icon: 'fas fa-angle-double-right',
children: [
{ name: 'Second-one', icon: 'fas fa-dot-circle' },
{ name: 'Second-two', icon: 'fas fa-dot-circle' },
{
name: 'Second-three',
icon: 'fas fa-angle-double-right',
children: [
{ name: 'Third-one', icon: 'fas fa-dot-circle' },
{ name: 'Third-two', icon: 'fas fa-dot-circle' },
{ name: 'Third-three', icon: 'fas fa-dot-circle' },
],
},
],
},
];
};
Color
Set the color of an active item using the
[color]
input.
Current color: primary
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<div class="text-center mb-5">
<button (click)="setColor('primary')" type="button" class="btn btn-primary" id="primary">Primary</button>
<button (click)="setColor('secondary')" type="button" class="btn btn-secondary" id="secondary">Secondary</button>
<button (click)="setColor('warning')" type="button" class="btn btn-warning" id="warning">Warning</button>
<button (click)="setColor('danger')" type="button" class="btn btn-danger" id="danger">Danger</button>
<button (click)="setColor('info')" type="button" class="btn btn-info" id="info">Info</button>
<button (click)="setColor('success')" type="button" class="btn btn-success" id="success">Success</button>
<button (click)="setColor('dark')" type="button" class="btn btn-dark" id="dark">Dark</button>
</div>
<div class="row text-center">
<h5>Current color: <span id="current-color">{{ color }}</span></h5>
</div>
<mdb-treeview
textField="name"
childrenField="children"
[nodes]="data"
[color]="color"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
color = 'primary';
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
];
setColor(newColor) {
this.color = newColor;
}
};
Line
Use a [line]
input to set up an additional line in every nested list.
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<mdb-treeview
textField="name"
childrenField="children"
[nodes]="data"
[line]="true"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
];
};
Disabled
To generate a disabled list item, use disabled
property. You can expand disabled items, but you can't select them.
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<mdb-treeview
textField="name"
childrenField="children"
[nodes]="data"
[selectable]="true"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two', disabled: true },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
disabled: true,
children: [
{
name: 'Third-one',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
];
};
Filter
Use the .filter(string)
method to expand list items that meet your requirements.
- One
- Two
-
Three
- Second-one
- Second-two
-
Second-three
-
Third-one
- Fourth-one
- Fourth-two
- Fourth-three
- Third-two
-
Third-three
- Fourth-one
- Fourth-two
- Fourth-three
-
Third-one
<mdb-form-control>
<input (change)="treeview.filter($event.target.value)" mdbInput type="text" id="form1" class="form-control" />
<label mdbLabel class="form-label" for="form1">Find in the treeview</label>
</mdb-form-control>
<mdb-treeview
#treeview="mdbTreeview"
textField="name"
childrenField="children"
[nodes]="data"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [{ name: 'Fourth-one' }, { name: 'Fourth-two' }, { name: 'Fourth-three' }],
},
],
},
],
},
];
};
Tree view - API
Installation
To install and configure the plugin follow our Plugins Installation Guide. Please remember to update all the plugin names and import paths. You can find all the necessary information in the Import section.
npm i git+https://oauth2:ACCESS_TOKEN@git.mdbootstrap.com/mdb/angular/mdb5/plugins/prd/treeview
Import
import { MdbTreeviewModule } from 'mdb-angular-treeview';
…
@NgModule ({
...
imports: [MdbTreeviewModule],
...
})
@import 'mdb-angular-treeview/scss/treeview.scss';
Inputs
Name | Type | Default | Description |
---|---|---|---|
color
|
MdbTreeviewColor | 'primary' |
Defines a text and background color for an active or hovered item |
openOnClick
|
Boolean | true |
Enables opening list by clicking only on the icon |
selectable
|
Boolean | false |
Setup checkboxes for the every list item |
accordion
|
Boolean | false |
Allows only one list on the same level to be opened |
rotationAngle
|
String | 90 |
Defines a rotation angle of the icons in nested lists |
line
|
Boolean | false |
Adds a line to every nested list |
Outputs
Name | Type | Description |
---|---|---|
selected
|
EventEmitter<any> | This output fires immediately when one of the treeview checkboxes are changed. |
activeItemChange
|
EventEmitter<ElementRef> | This event fires immediately when one of the treeview list items are selected by click. |
<mdb-treeview
textField="name"
childrenField="children"
[nodes]="data"
(activeItemChange)="onActiveItemChange($event)"
></mdb-treeview>
import { Component, ElementRef } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
children: [
{ name: 'Fourth-one' },
{ name: 'Fourth-two' },
{ name: 'Fourth-three' },
],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [
{ name: 'Fourth-one' },
{ name: 'Fourth-two' },
{ name: 'Fourth-three' },
],
},
],
},
],
},
];
onActiveItemChange(event: ElementRef): void {
console.log('onActiveItemChange: ', event);
}
}
Methods
Name | Description | Example |
---|---|---|
collapse
|
Collapses every list in treeview | treeview.collapse() |
expand(id:string)
|
Expands a treeview to the list with a particular ID | treeview.expand('example-id') |
filter(value:string)
|
Expands list items that meet your requirements | treeview.filter('Name') |
<button class="btn btn-lg" (click)="treeview.collapse()">Collapse tree</button>
<mdb-treeview
#treeview
textField="name"
childrenField="children"
[nodes]="data"
></mdb-treeview>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
data = [
{ name: 'One' },
{ name: 'Two' },
{
name: 'Three',
children: [
{ name: 'Second-one' },
{ name: 'Second-two' },
{
name: 'Second-three',
children: [
{
name: 'Third-one',
children: [
{ name: 'Fourth-one' },
{ name: 'Fourth-two' },
{ name: 'Fourth-three' },
],
},
{ name: 'Third-two' },
{
name: 'Third-three',
children: [
{ name: 'Fourth-one' },
{ name: 'Fourth-two' },
{ name: 'Fourth-three' },
],
},
],
},
],
},
];
}