javascript - 使用递归数组递归组件加载

标签 javascript arrays recursion angular

我正在尝试使用递归数组递归加载 Angular 2 组件(plunk:http://plnkr.co/edit/3npsad?p=preview)。

给定这个递归数组:

[
  {
    "id": 1,
    "text": "abc"
  },
  {
    "id": 2,
    "text": "def",
    items: [
      {
        "id": 21,
        "text": "def-1",
        items: [
          {
            "id": 211,
            "text": "def-1-1"
          },
          {
            "id": 212,
            "text": "def-1-2"
          }
        ]
      },
      {
        "id": 22,
        "text": "def-2"
      }
    ]
  }
]

我需要以下输出:

<my-item>
    <div id="1" text="abc"></div>
</my-item>
<my-item>
    <div id="2" text="def"></div>
    <my-item>
        <div id="21" text="def-1"></div>
        <my-item>
            <div id="211" text="def-1-1"></div>
        </my-item>
        <my-item>
            <div id="212" text="def-1-2"></div>
        </my-item>
    </my-item>
    <my-item>
        <div id="22" text="def-2"></div>
    </my-item>
</my-item>

我只能渲染第一级输入,如我的 plunk 中所示。如何使我的组件递归迭代以呈现所需的输出?输入数组可以包含任意数量的元素和嵌套。

谢谢!

最佳答案

更新

随着 @NgModule 的引入以及 directives@NgModule 的迁移,forwardRef 不应该不再需要了。

原创

<my-item *ngFor="let itm of items" [id]="itm.id" [text]="itm.text" [items]="itm.items" >
</my-item>
@Component({
  selector: 'my-item',
  styles: ['div {padding-left: 32px;}']
  providers: [],
  template: `<div>{{id}} - {{text}}
    <my-item *ngFor="let itm of items" [id]="itm.id" [text]="itm.text" [items]="itm.items" >
    </my-item>
    </div>

  `,
  directives: [forwardRef(()=> ItemComponent)]
})
export class ItemComponent {
  @Input() id: string;
  @Input() text: string;
  @Input() items: any[];
  constructor() {
  }
}

forwardRef 是必需的,因为类 ItemComponent 在声明之前被引用。

Plunker example

关于javascript - 使用递归数组递归组件加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38821475/

相关文章:

c# - 复制阵列的最快方法是什么?

javascript - 从 Array React JS 创建列表

python - 如何在 Python 递归函数中将具有多个值的变量加在一起?

haskell - 在没有输入变量的情况下在 Haskell 中实现递归

javascript - jQuery:定位除___之外的所有目标?

javascript - 如果在 Express 中出现 "no-result found"场景,我如何在不显示空数组的情况下将我的选择错误消息输出到浏览器 []

java - 这是添加额外组合框项目的代码,但相应的组合框值没有改变

javascript - Google Apps 脚本.递归添加项目?

javascript - 如何将从 firebase 读取的值分配给变量

javascript - 使用 JavaScript 的字母追踪游戏