@vaseap/ng-material-treetable v0.2.0
Angular Material TreeTable Component
This is an extensions of the ng-material-treetable library.
A simple, customisable, and easy to use Angular Material TreeTable component.

Table of Contents
Installation
Simply install the package through npm
npm i ng-material-treetable --saveMake sure you have the angular material packages installed
npm i @angular/material @angular/cdk @angular/animations --saveimport the main module
import { TreetableModule } from 'ng-material-treetable';
@NgModule({
...
imports: [
...
TreetableModule
],
...
})
export class AppModule { }and use the component in your template
<treetable [tree]="yourTreeDataStructure"></treetable>Finally, make sure you import the required material icons font in your styles.css
@import url('https://fonts.googleapis.com/css?family=Roboto:400,700|Material+Icons');Data Format
The tree object that's rendered by the component can either be a Node<T> or a Node<T>[] where Node<T> is the following interface
import { Node } from 'ng-material-treetable';
interface Node<T> {
value: T;
children: Node<T>[];
}Here's a simple example.
{
value: {
name: 'Reports',
owner: 'Eric',
protected: true,
backup: true
},
children: [
{
value: {
name: 'Charts',
owner: 'Stephanie',
protected: false,
backup: true
},
children: []
},
{
value: {
name: 'Sales',
owner: 'Virginia',
protected: false,
backup: true
},
children: []
},
{
value: {
name: 'US',
owner: 'Alison',
protected: true,
backup: false
},
children: [
{
value: {
name: 'California',
owner: 'Claire',
protected: false,
backup: false
},
children: []
},
{
value: {
name: 'Washington',
owner: 'Colin',
protected: false,
backup: true
},
children: [
{
value: {
name: 'Domestic',
owner: 'Oliver',
protected: true,
backup: false
},
children: []
},
{
value: {
name: 'International',
owner: 'Oliver',
protected: true,
backup: true
},
children: []
}
]
}
]
}
]
}Options
Work in Progress...
An option input property can be used to customise the component
import { Node, Options } from 'ng-material-treetable';<treetable
[tree]="yourTreeDataStructure"
[options]="yourOptions">
</treetable>| Name | Description | Type | Default |
|---|---|---|---|
verticalSeparator | If true, separates table columns with vertical lines. | boolean | true |
capitalisedHeader | If true, capitalise the first letter of each column header. | boolean | - |
highlightRowOnHover | If true, hovering the mouse over a row highlights its background. | boolean | true |
customColumnOrder | By default, the columns are ordered following the array generated by calling Object.keys() on the nodes of the tree object; this option can be used to specify a custom order. Note that customColumnOrder needs to be an array containing all the keys present in the node object. | Array | - |
elevation | Sets the elevation of the card element wrapping the tree component. | number | 5 |
defaultCollapsible | If true, sets all children collapsed to depth 0 by default. | boolean | false |
customColumnOrder
Given a tree data type like
interface Person {
name: string;
age: number;
married: boolean;
}
const tree: Node<Person> = ...a custom column order can be specified with the following options object
const opts: Options<Person> = {
customColumnOrder: ['married', 'age', 'name']
}an incomplete or incorrect customColumnOrder value will result in an error
customColumnOrder: ['married', 'age'] // 'name' missing
customColumnOrder: ['married', 'age', 'name', 'surname'] // 'surname' is not a valid keyEvents
Work in Progress...
| Name | Description | Type |
|---|---|---|
nodeClicked | Whenever a node is expanded or collapsed, emits an event with the new status of the node | Node<T> |
nodeClicked
<treetable
[tree]="yourTreeDataStructure"
(nodeClicked)="logToggledNode($event)">
</treetable>logToggledNode(node: Node<SomeNodeType>): void {
console.log(node);
}5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago