javascript - 以角度 2 显示嵌套列表
问题描述
我想显示嵌套列表。列表结构:
[
{
name: "Level 1A",
children: [
{
name: "Level 2A",
children: [
]
},
{
name: "Level 2B",
children: [
{
name: "Level 3A",
children: [...]
}
]
}
]
},
{
name: "Level 1B",
children: [
{
name: "Level 2A"
children: [...]
}
]
}
]
如您所见,我们有具有 2 个属性的项目:名称和子项。它可能是嵌套了许多层。HTML 输出应该是这样的:
<list>
<list-grup name="Level 1A">
<list-item name="Level 2A"></list-item>
<list-item name="Level 2B"></list-item>
</list-grup>
<list-grup name="Level 1B">
<list-item name="Level 2A"></list-item>
</list-grup>
</list>
我发现的唯一方法是像这样显示它:
<list>
<ng-container *ngFor="let item of list">
<list-group *ngIf="item.children" [item]="item.name">
<ng-container *ngFor="let item1 of item.children">
<list-group [item]="item1.name">
<list-group *ngIf="item1.children" [item]="item1.name">
<ng-container *ngFor="let item2 of item1.children">
...
</ng-container>
</list-group>
</list-group>
</ng-container>
</list-group>
</ng-container>
</list>
但是这种方式是不正确的,因为我不希望它被硬编码,因为这些数据将是动态的。你能帮我找到更好的解决方案来显示这些数据吗?它可以在模板或组件中完成。
解决方案
一种可能的方法是创建一个表示单个节点(名称、子节点)的组件
首先是界面:
export interface Node {
name: string;
children: Node[];
}
具有一个@Input()
绑定的组件
export class NodeComponent implements OnInit {
@Input() node: Node;
html
<li>
<p>{{node.name}}</p>
<ul *ngFor="let item of node.children">
<app-node [node]="item"></app-node>
</ul>
</li>
整个过程从以下开始:
<ul>
<ng-container *ngFor="let item of list">
<app-node [node]="item"></app-node>
</ng-container>
</ul>
工作堆栈闪电战
支持展开/折叠的版本
推荐阅读
- javascript - 如何检查我的字符串是否以 WA 结尾,后跟 9 位数字
- ios - 如何将数据从视图控制器发送到 swift 5 中的嵌入式视图控制器?
- python - Python 和华为 Wingle - 发送 USSD 代码时出错(使用 huawei-modem-python-api-client 库)
- php - 单击获取 ajax 请求 4 次
- docker - 有没有办法让用户在 CentOS docker 映像中使用 sudo 命令?
- mysql - 分区中的列值与 Rank 1 行中的值相同
- python - 通过唯一的行 id 将调用序列号作为新列添加到大熊猫 DataFrame
- spring-boot - Spring boot 无法解析占位符
- c - 为什么子函数不破坏 GtkWindow?
- jbpm - Drools/jBPM - 在 Kie 执行服务器上远程执行规则