我有一个使用管道的递归角度模板。我的问题是它最多只能显示 2 级。
管道转换器
在这里,递归过滤数据以通过 parentid 找到所有孩子
@Pipe({ name: 'converter' })
export class ConverterPipe implements PipeTransform {
transform(array: any[], parentId: string = "0"): any[] {
return this.filterNodes(array, parentId);
}
filterNodes(array: any[], parentId: string): any[] {
return array.filter((node) => {
return node.parent === parentId;
}).map((node) => {
console.log("parentid > " + parentId)
console.log(node)
node["items"] = this.filterNodes(array, node.id);
return node;
});
}
}
HTML
递归模板
<ul>
<li *ngFor="let item of mainmenu" >
<a href="#" >{{ item.id }} {{ item.name }}</a>
<ng-container *ngTemplateOutlet="List; context:{ $implicit: submenu , parentid: item.id, submenuclass:1 }"></ng-container>
</li>
</ul>
<ng-template #List let-items let-parentid="parentid", let-submenuclass="submenuclass">
<ul>
<li *ngFor="let item of items | converter: parentid">
<a href="#">{{ item.id }} {{ item.name }} {{ parentid }}</a>
<ng-container *ngTemplateOutlet="List; context:{ $implicit: submenu, parentid:item.id, submenclass:0}"></ng-container>
</li>
</ul>
</ng-template>
打字稿
包含将主菜单与子菜单分开的数据和 2 个变量
menu = [
{
"id": "32",
"name": "System Admin",
"parent": "0",
}, {
"id": "33",
"name": "User Maintenance",
"parent": "32",
},
{
"id": "35",
"name": "Back Office Users",
"parent": "33",
},
{
"id": "37",
"name": "Portal Users",
"parent": "33",
},
{
"id": "36",
"name": "Site Maintenance",
"parent": "32",
},
{
"id": "38",
"name": "Sample",
"parent": "35",
},
{
"id": "39",
"name": "Sample2",
"parent": "35",
}
];
mainmenu;
submenu;
constructor() { }
ngOnInit() {
this.mainmenu = this.menu.filter( item => item.parent =="0")
this.submenu = this.menu.filter( item => item.parent !="0")
}
当我运行应用程序时,最后两个数据“Sample”和“Sample2”未显示在“Back Office Users”下。