Lar*_*dal 4 treeview angular-material angular angular7
我正在尝试从数据源获取使用布尔值的材质树。我正在对输入进行过滤 datasource.data ,这会导致每次用户输入内容时树都会折叠。为了避免这种情况,我想在特定行中使用布尔值来展开/折叠材质树。我已经使用材质表成功完成了此操作,但无法使其与树一起使用。这是我到目前为止所拥有的:
HTML 文件:
<mat-tree [dataSource]="nestedDataSource" [treeControl]="nestedTreeControl" class="example-tree">
<mat-tree-node *matTreeNodeDef="let node">
<li class="mat-tree-node">
<button mat-icon-button disabled></button>
{{node.name}}
</li>
</mat-tree-node>
<mat-nested-tree-node *matTreeNodeDef="let node; when: hasNestedChild">
<li>
<div class="mat-tree-node">
<button mat-icon-button
[attr.aria-label]="'toggle ' + node.name"
click="changeState(node)">
<mat-icon class="mat-icon-rtl-mirror">
{{node.expanded ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
{{node.name}} ({{node.expanded}})
</div>
<ul [class.example-tree-invisible]="node.expanded">
<ng-container matTreeNodeOutlet></ng-container>
</ul>
</li>
</mat-nested-tree-node>
</mat-tree>
Run Code Online (Sandbox Code Playgroud)
TS 文件:
import {NestedTreeControl} from '@angular/cdk/tree';
import {Component, Injectable} from '@angular/core';
import {MatTreeNestedDataSource} from '@angular/material/tree';
import {BehaviorSubject} from 'rxjs';
/**
* Json node data with nested structure. Each node has a filename and a value or a list of children
*/
export class FileNode {
childGroups: FileNode[];
name: string;
expanded: boolean;
}
/**
* The Json tree data in string. The data could be parsed into Json object
*/
const TREE_DATA = [
{
'name': 'Group 1',
'expanded': false,
'childGroups': [
{
'name': 'Childgroup 1',
'expanded': false,
'childGroups': []
},
{
'name': 'Childgroup 2',
'expanded': false,
'childGroups': [
{
'name': 'Child of child',
'expanded': false,
'childGroups': []
}
]
}
]
},
{
'name': 'Group 2',
'expanded': false,
'childGroups': [
{
'name': 'Childgroup 1',
'expanded': false,
'childGroups': []
},
{
'name': 'Childgroup 2',
'expanded': false,
'childGroups': [
{
'name': 'Child of child',
'expanded': false,
'childGroups': []
}
]
}
]
},
{
'name': 'Group 3',
'expanded': false,
'childGroups': [
{
'name': 'Childgroup 1',
'expanded': false,
'childGroups': []
},
{
'name': 'Childgroup 2',
'expanded': false,
'childGroups': [
{
'name': 'Child of child',
'expanded': false,
'childGroups': []
}
]
}
]
},
]
@Component({
selector: 'tree-nested-overview-example',
templateUrl: 'tree-nested-overview-example.html',
styleUrls: ['tree-nested-overview-example.css']
})
export class TreeNestedOverviewExample {
nestedTreeControl: NestedTreeControl<FileNode>;
nestedDataSource: MatTreeNestedDataSource<FileNode>;
constructor() {
this.nestedTreeControl = new NestedTreeControl<FileNode>(this._getChildren);
this.nestedDataSource = new MatTreeNestedDataSource();
this.nestedDataSource.data = TREE_DATA;
}
hasNestedChild = (_: number, nodeData: FileNode) =>
nodeData.childGroups.length > 0;
private _getChildren = (node: FileNode) => node.childGroups;
changeState(node) {
console.log(node);
node.expanded = !node.expanded;
}
}
Run Code Online (Sandbox Code Playgroud)
要绑定到 DOM 事件,请将 DOM 事件名称括在括号中,并为其分配带引号的模板语句。
您需要做的就是将click更改为(click)。
| 归档时间: |
|
| 查看次数: |
13913 次 |
| 最近记录: |