You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular如何实现组件自身递归复用并解决调用栈溢出问题

问题原因

你遇到的栈溢出是因为递归逻辑出现了无限循环:当parentData.isFolder为true时,你直接把当前接收的同一个parentData对象再次传入子组件,这个对象的isFolder属性永远为true,会导致子组件被无限创建,最终触发栈溢出。

要实现嵌套目录的递归渲染,首先要调整数据结构,文件夹类型的节点需要新增children字段,存储该文件夹下的所有子文件/子文件夹数据。


修复方案

1. 修改父组件数据结构(parent-component.component.ts)

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-parent-component',
  templateUrl: './parent-component.component.html',
  styleUrls: ['./parent-component.component.css'],
})
export class ParentComponentComponent implements OnInit {
  public parentData;
  constructor() {}

  ngOnInit() {
    this.parentData = [
      {
        name: 'Example folder 1',
        isFolder: true,
        Id: '111',
        // 新增children字段存储文件夹下的子节点
        children: [
          {
            name: 'Sub file 1',
            isFolder: false,
            Id: '111-1'
          },
          {
            name: 'Sub folder 1',
            isFolder: true,
            Id: '111-2',
            children: [
              {
                name: 'Deep file 1',
                isFolder: false,
                Id: '111-2-1'
              }
            ]
          }
        ]
      },
      {
        name: 'Example file 2',
        isFolder: false,
        Id: '222',
      },
      {
        name: 'Example file 3',
        isFolder: false,
        Id: '333',
      },
    ];
  }
}

父组件模板无需修改,保持原有逻辑即可。

2. 修改子组件模板(child-component.component.html)

<ul>
  <li>
    <!-- 文件节点直接显示名称 -->
    <span *ngIf="!parentData.isFolder">{{ parentData.name }}</span>
    <!-- 文件夹节点先显示名称,再递归渲染子节点 -->
    <ng-container *ngIf="parentData.isFolder">
      <span>{{ parentData.name }}</span>
      <ng-container *ngFor="let child of parentData.children">
        <app-child-component [parentData]="child"></app-child-component>
      </ng-container>
    </ng-container>
  </li>
</ul>

子组件ts文件无需修改,保持原有逻辑即可。

修改后递归会沿着文件夹的children层级向下渲染,当遇到没有子节点的文件节点时自动终止递归,不会再出现无限循环的栈溢出问题,同时支持任意层级的目录嵌套渲染。


内容的提问来源于stack exchange,提问作者yellowSub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:09:01