template recursive component json tree html-lists angular

json - template - recursive component angular 4



Angular2 UL/LI JSON-árbol recursivo en ngFor (2)

No necesita crear un nuevo componente de tree-view para hacer esto, simplemente puede usar este patrón en cualquiera de sus plantillas:

Si su matriz de datos era una list de propiedades públicas de su componente:

<h1>Angular 2 Recursive List</h1> <ul> <ng-template #recursiveList let-list> <li *ngFor="let item of list"> {{item.name}} <ul *ngIf="item.subnodes.length > 0"> <ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: item.children }"></ng-container> </ul> </li> </ng-template> <ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: list }"></ng-container> </ul>

Aquí hay una gist .

Me gustaría convertir los árboles JSON en listas desordenadas en Angular2. Conozco la solución de directiva recursiva de Angular1 y estoy bastante seguro de que la solución en Angular2 también será recursiva.

[ {name:"parent1", subnodes:[]}, {name:"parent2", subnodes:[ {name:"parent2_child1", subnodes:[]} ], {name:"parent3", subnodes:[ {name:"parent3_child1", subnodes:[ {name:"parent3_child1_child1", subnodes:[]} ] } ] } ]

a esta lista desordenada

<ul> <li>parent1</li> <li>parent2 <ul> <li>parent2_child1</li> </ul> </li> <li>parent3 <ul> <li>parent3_child1 <ul> <li>parent3_child1_child1</li> </ul> </li> </ul> </li> </ul>

usando Angular2 y ngFor. Alguien tiene una idea?


Tomando prestado el puesto de Torgeir Helgevold , se me ocurrió este Plunkr . Aquí está el código:

Componente TreeView:

import {Component, Input} from ''angular2/core''; @Component ({ selector: ''tree-view'', directives: [TreeView], template: ` <ul> <li *ngFor="#node of treeData"> {{node.name}} <tree-view [treeData]="node.subnodes"></tree-view> </li> </ul> ` }) export class TreeView { @Input() treeData: []; }

Componente de la aplicación:

import {Component} from ''angular2/core''; import {TreeView} from ''./tree-view.component''; @Component({ selector: ''my-app'', directives: [TreeView], template: ` <h1>Tree as UL</h1> <tree-view [treeData]="myTree"></tree-view> ` }) export class AppComponent { myTree = [ {name:"parent1", subnodes:[]}, {name:"parent2", subnodes:[ {name:"parent2_child1", subnodes:[]} ], {name:"parent3", subnodes:[ {name:"parent3_child1", subnodes:[ {name:"parent3_child1_child1", subnodes:[]} ] } ] } ]; }