Tree
mat-tree for hierarchical data display with expand/collapse and checkboxes.
Basic Tree
mat-tree with flat data source and expand/collapse toggle.
HTML
TS
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding>
<button mat-icon-button disabled></button>
{{ node.name }}
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node; when: hasChild" matTreeNodePadding>
<button mat-icon-button matTreeNodeToggle aria-label="Toggle node">
<mat-icon class="mat-icon-rtl-mirror">
{{ treeControl.isExpanded(node) ? "expand_more" : "chevron_right" }}
</mat-icon>
</button>
{{ node.name }}
</mat-tree-node>
</mat-tree>Tree with Checkboxes
mat-tree with checkbox selection on each node.
HTML
TS
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding>
<button mat-icon-button disabled></button>
<mat-checkbox
[checked]="checklistSelection.isSelected(node)"
(change)="checklistSelection.toggle(node)"
(click)="$event.stopPropagation()">
{{ node.name }}
</mat-checkbox>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node; when: hasChild" matTreeNodePadding>
<button mat-icon-button matTreeNodeToggle aria-label="Toggle node">
<mat-icon>
{{ treeControl.isExpanded(node) ? "expand_more" : "chevron_right" }}
</mat-icon>
</button>
<mat-checkbox
[checked]="descendantsAllSelected(node)"
[indeterminate]="descendantsPartiallySelected(node)"
(change)="itemSelectionToggle(node)">
{{ node.name }}
</mat-checkbox>
</mat-tree-node>
</mat-tree>