繁体   English   中英

如何制作 mat-tree 组件 Angular 材料 6.0.1

[英]How to make mat-tree component Angular Material 6.0.1

我正在尝试做一个材料 angular 基于 mat-tree 的应用程序但是当我运行此代码时它没有显示值并且我没有收到任何错误我该如何解决这个帮助我继续前进

当我们打开应用程序时,我们需要显示 class 名称

下面我添加了我的 html 和组件代码

<mat-nested-tree-node *matTreeNodeDef="let node; when: hasNestedChild">
    <li>
      <div class="mat-tree-node">
        <button mat-icon-button matTreeNodeToggle
                [attr.aria-label]="'toggle ' + node.filename">
          <mat-icon class="mat-icon-rtl-mirror">
            {{nestedTreeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
          </mat-icon>
        </button>

      </div>
      <ul [class.example-tree-invisible]="!nestedTreeControl.isExpanded(node)">
        <ng-container matTreeNodeOutlet></ng-container>
      </ul>
    </li>
  </mat-nested-tree-node>

零件:

const TREE_DATA = [
{
    "class":"ece",
    "count":60,
    "students": [

            {"name":"a","id":"11"},
            {"name":"b","id":"12"},
            {"name":"c","id":"13"},
            {"name":"d","id":"14"}

    ]
},
{
    "class":"mech",
    "count":60,
    "students": [

            {"name":"r","id":"21"},
            {"name":"e","id":"22"},
            {"name":"w","id":"23"},
            {"name":"q","id":"24"}

    ]
}
];


@Injectable()
export class FileDatabase {
  dataChange = new BehaviorSubject<FileNode[]>([]);

  get data(): FileNode[] { return this.dataChange.value; }

  constructor() {
    this.initialize();
  }

  initialize() {

    const dataObject = TREE_DATA;


    const data = this.buildFileTree(dataObject, 0);


    this.dataChange.next(data);
  }


  buildFileTree(obj: object, level: number): FileNode[] {
    return Object.keys(obj).reduce<FileNode[]>((accumulator, key) => {
      const value = obj[key];
      const node = new FileNode();
      node.filename = key;

      if (value != null) {
        if (typeof value === 'object') {
          node.children = this.buildFileTree(value, level + 1);
        } else {
          node.type = value;
        }
      }

      return accumulator.concat(node);
    }, []);
  }
}

/**
 * @title Tree with nested nodes
 */
@Component({
  selector: 'tree-nested-overview-example',
  templateUrl: 'tree-nested-overview-example.html',
  styleUrls: ['tree-nested-overview-example.css'],
  providers: [FileDatabase]
})
export class TreeNestedOverviewExample {
  nestedTreeControl: NestedTreeControl<FileNode>;
  nestedDataSource: MatTreeNestedDataSource<FileNode>;

  constructor(database: FileDatabase) {
    this.nestedTreeControl = new NestedTreeControl<FileNode>(this._getChildren);
    this.nestedDataSource = new MatTreeNestedDataSource();

    database.dataChange.subscribe(data => this.nestedDataSource.data = data);
  }

  hasNestedChild = (_: number, nodeData: FileNode) => !nodeData.type;

  private _getChildren = (node: FileNode) => node.children;
}

这是我的演示

当我打开页面时,它应该是这样的

在此处输入图像描述

当我点击 ece 它应该是这样的

在此处输入图像描述

它添加了{{node:json}}以下的内容,您只需要从节点对象中获取正确的数据。

    <button mat-icon-button matTreeNodeToggle
            [attr.aria-label]="'toggle ' + node.filename">
      <mat-icon class="mat-icon-rtl-mirror">
        {{nestedTreeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
      </mat-icon>
      {{node | json}}
    </button>
<mat-tree>
    <mat-tree-node> Parent node name </mat-tree-node>
    <mat-tree-node> Child Node 1 </mat-tree-node>
    <mat-tree-node> Child Node 2 </mat-tree-node>
</mat-tree>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM