【发布时间】:2020-05-07 08:37:40
【问题描述】:
我在手风琴中递归调用一个组件以显示树状结构。
该代码适用于短输入,但它滞后于嵌套数据的递归调用
它就像一棵 json 树。
//sample.component.html
<app-tree [input]="data"></app-tree>
//tree.component.html
<mat-accordion>
<mat-expansion-panel hideToggle="true" (click)="toggleTree($event, input)">
<mat-expansion-panel-header>
<mat-panel-title>
<mat-icon>{{input.buttonName}}</mat-icon>
{{input.key}}
</mat-panel-title>
</mat-expansion-panel-header>
<ul class="main-obj"> // tried *ngIf here
<div class="obj-list" *ngFor="let item of input.value; trackBy: trackChanges">
<li>
{{item.key}}: {{item.value}}
</li>
<li style="list-style: none; margin-left: -40px;">
<app-tree [input]="item"></app-tree>
</li>
</div>
</ul>
</mat-expansion-panel>
</mat-accordion>
//tree.component.ts
import { Component, OnInit, Input, Output } from '@angular/core';
import { EventEmitter } from 'events';
@Component({
selector: 'app-tree',
templateUrl: './tree.component.html',
styleUrls: ['./tree.component.css']
})
export class TreeComponent implements OnInit {
@Input() input: any;
@Output() click = new EventEmitter();
constructor(){}
ngOnInit(){
}
toggleTree(event, toggleButton) {
event.stopPropagation();
if(toggleButton.buttonName == 'add')
toggleButton.buttonName = 'remove';
else
toggleButton.buttonName = 'add';
};
trackChanges = (index) => {
return index;
}
}
我尝试过放置 ngIf(如 ngFor 之前的代码所示),但效果不佳。
打开手风琴有没有办法加载组件?
谢谢!
【问题讨论】:
标签: angular recursion tree components angular8