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

如何在Angular中使用ngFor遍历含嵌套数组对象的数组?

在Angular中用*ngFor遍历带子菜单的侧边栏数组

我来帮你搞定这个侧边栏遍历的问题!先把组件的基础配置补全,再写模板里的遍历逻辑就行。

第一步:完善组件类(sidemenu.component.ts)

首先得确保正确导入你的菜单数组和对应类型,然后把它赋值给组件内的变量,这样模板才能访问到:

import { Component, OnInit } from '@angular/core';
import { SIDEMENULINKS } from './sidemenu-links';
import { SideMenuLink } from './sidemenu-link';

export class SidemenuComponent implements OnInit {
  // 将导入的菜单数组赋值给组件变量,供模板使用
  sideMenuLinks: SideMenuLink[] = SIDEMENULINKS;

  constructor() { }

  ngOnInit(): void {
  }
}

第二步:编写模板遍历逻辑(sidemenu.component.html)

这里需要用嵌套的*ngFor,先遍历主菜单,再针对有子菜单的项遍历它的subLinks数组,同时加个判断避免空菜单渲染多余结构:

<!-- 主菜单容器 -->
<ul class="side-menu">
  <!-- 遍历每一个一级菜单链接 -->
  <li *ngFor="let mainLink of sideMenuLinks" class="side-menu__item">
    <!-- 一级菜单的链接与标题 -->
    <a [routerLink]="[mainLink.linkRoute]" class="side-menu__link">
      {{ mainLink.linkTitle }}
    </a>

    <!-- 仅当subLinks存在且不为空时,渲染子菜单 -->
    <ul *ngIf="mainLink.subLinks && mainLink.subLinks.length > 0" class="side-menu__submenu">
      <!-- 遍历当前一级菜单下的子链接 -->
      <li *ngFor="let subLink of mainLink.subLinks" class="side-menu__subitem">
        <a [routerLink]="[subLink.linkRoute]" class="side-menu__sublink">
          {{ subLink.linkTitle }}
        </a>
      </li>
    </ul>
  </li>
</ul>

关键点说明:

  • 外层*ngFor负责遍历所有一级菜单项,对应SIDEMENULINKS里的每一个对象
  • *ngIf判断是为了过滤掉没有子菜单的项,避免页面出现空的子菜单容器
  • 内层*ngFor专门处理每个主菜单下的subLinks数组,渲染二级菜单
  • [routerLink]是Angular的路由绑定指令,确保点击链接能跳转到对应路由页面

这样就能完美渲染出带层级的侧边菜单啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:59:49