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

Angular4手风琴菜单循环API响应时数据缺失问题求助

解决手风琴菜单层级数据绑定问题

嗨,我帮你梳理下问题:你现在只渲染出1个group,核心原因是没有用*ngFor遍历所有的group数组项,而是直接取了第一个group数据。接下来给你具体的修改方案,完美适配你的层级结构(category → 4个group → 每个group下2个subgroup):

第一步:确认数据结构

先确保你的API返回的JSON结构是类似这样的(group必须是数组,才能遍历出4个项):

// 组件中接收的API数据示例
menuData = {
  category: "你的主分类名称",
  groups: [
    {
      group: "组1",
      subgroups: [{ subgroup: "子组1-1" }, { subgroup: "子组1-2" }]
    },
    {
      group: "组2",
      subgroups: [{ subgroup: "子组2-1" }, { subgroup: "子组2-2" }]
    },
    {
      group: "组3",
      subgroups: [{ subgroup: "子组3-1" }, { subgroup: "子组3-2" }]
    },
    {
      group: "组4",
      subgroups: [{ subgroup: "子组4-1" }, { subgroup: "子组4-2" }]
    }
  ]
};

第二步:修改模板代码

把你的手风琴模板改成下面这样,重点是用*ngFor遍历所有group和subgroup,同时动态生成唯一的ID(避免Bootstrap手风琴交互冲突):

<div class="accordion" id="mainAccordion">
  <!-- 主分类折叠面板 -->
  <div class="accordion-item">
    <h2 class="accordion-header" id="categoryHeading">
      <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#categoryCollapse" aria-expanded="true" aria-controls="categoryCollapse">
        {{ menuData.category }}
      </button>
    </h2>
    <div id="categoryCollapse" class="accordion-collapse collapse show" aria-labelledby="categoryHeading" data-bs-parent="#mainAccordion">
      <div class="accordion-body">
        <!-- 遍历所有4个group -->
        <div *ngFor="let group of menuData.groups; let groupIndex = index" class="accordion" [id]="'groupAccordion-' + groupIndex">
          <div class="accordion-item">
            <h2 class="accordion-header" [id]="'groupHeading-' + groupIndex">
              <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" [attr.data-bs-target]="'#groupCollapse-' + groupIndex" aria-expanded="false" [attr.aria-controls]="'groupCollapse-' + groupIndex">
                {{ group.group }}
              </button>
            </h2>
            <div [id]="'groupCollapse-' + groupIndex" class="accordion-collapse collapse" [attr.aria-labelledby]="'groupHeading-' + groupIndex" [attr.data-bs-parent]="'#groupAccordion-' + groupIndex">
              <div class="accordion-body">
                <!-- 遍历当前group下的2个subgroup -->
                <div *ngFor="let subgroup of group.subgroups; let subIndex = index" class="mb-2">
                  <span class="fw-bold">子组{{ groupIndex + 1 }}-{{ subIndex + 1 }}:</span> {{ subgroup.subgroup }}
                </div>
                <!-- 如果subgroup也要做成折叠项,替换成下面的手风琴结构 -->
                <!-- <div class="accordion" [id]="'subgroupAccordion-' + groupIndex + '-' + subIndex">
                  <div class="accordion-item">
                    <h2 class="accordion-header" [id]="'subgroupHeading-' + groupIndex + '-' + subIndex">
                      <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" [attr.data-bs-target]="'#subgroupCollapse-' + groupIndex + '-' + subIndex" aria-expanded="false" [attr.aria-controls]="'subgroupCollapse-' + groupIndex + '-' + subIndex">
                        {{ subgroup.subgroup }}
                      </button>
                    </h2>
                    <div [id]="'subgroupCollapse-' + groupIndex + '-' + subIndex" class="accordion-collapse collapse" [attr.aria-labelledby]="'subgroupHeading-' + groupIndex + '-' + subIndex" [attr.data-bs-parent]="'#subgroupAccordion-' + groupIndex + '-' + subIndex">
                      <div class="accordion-body">
                        这里放子组的具体内容
                      </div>
                    </div>
                  </div>
                </div> -->
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

关键注意点

  1. 动态ID生成:用groupIndex和subIndex拼接ID,确保每个折叠面板的ID唯一,否则Bootstrap手风琴的展开/收起会出现异常。
  2. 数组遍历:必须用*ngFor="let group of menuData.groups"遍历所有group,不能直接取menuData.groups[0](这就是你之前只显示1个group的原因)。
  3. 数据格式校验:如果API返回的groups不是数组,那要先在组件里把它转成数组,比如用Array.isArray(data.groups) ? data.groups : [data.groups]处理。

这样修改后,就能正确渲染出1个category、4个group,每个group下2个subgroup的完整手风琴菜单啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:47:19