angular - 使用数据布尔值展开/折叠材质树(Angular 7)
问题描述
我正在尝试从它的数据源中获取一个使用布尔值的材质树。我在输入上过滤 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>
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;
}
}
解决方案
推荐阅读
- quill - 单击按钮时如何触发 Quill JS 的提及模块
- ruby-on-rails - 自定义引导变量不适用于 Rails 6 和 Webpacker
- java - 如何在android studio java中向textview指定问题?
- python-3.x - Huggingface 的变形金刚管道
- symfony - 为 API Platform Bundle 中的布尔过滤器设置标准过滤器值
- python - 高斯混合模型的代码是否正确?
- node.js - 在 mongodb 文档中更新不起作用
- typescript - 使用 XLSX 时,Buffer.isBuffer 不是 Angular 6.1.10 中的函数
- android - AndroidStudio 找不到布局
- linux - 如何使用 ssh 将远程服务器变量存储到本地服务器变量?