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

Angular使用*ngIf与*ngFor实现侧边栏点击展开嵌套菜单

侧边栏菜单实现方案

核心改动逻辑

  • 给每个带嵌套子项的菜单加独立的展开状态控制字段,避免全局变量控制导致所有菜单同时展开
  • 点击时先判断是否有嵌套子项,有则切换展开状态并阻止路由跳转事件,无则正常走路由逻辑
  • 拆分同元素的*ngIf和*ngFor结构指令,避免Angular语法报错

代码修改

// 若使用TypeScript可先定义菜单项类型,无类型要求可跳过
interface MenuItem {
  label: string;
  image: string;
  route: string;
  nestedItems?: {label: string}[];
  isExpanded?: boolean;
}

// 初始化菜单数据,默认所有嵌套菜单收起
this.items: MenuItem[] = [
  { label: 'A', image: 'dashboard', route: 'AAA' },
  { label: 'B', image: 'my-apps', route: 'BBB' },
  { label: 'C', image: 'app-store', route: 'CCC' },
  { label: 'D', image: 'data', route: 'DDD' },
  { label: 'E', image: 'commercial-tools', route: 'EEE' },
  { label: 'F', image: 'dev-tools', route: 'FFF' },
  { label: 'G', image: 'data-source-mng', route: '',
    isExpanded: false,
    nestedItems: [{label: 'GA'}, {label: 'GB'}, {label: 'GC'}]
  },
];

// 菜单点击切换方法
toggleMenu(item: MenuItem, event: MouseEvent): void {
  // 存在嵌套子项时阻止路由触发,切换展开状态
  if (item.nestedItems?.length) {
    event.stopPropagation();
    event.preventDefault();
    item.isExpanded = !item.isExpanded;
  }
}
<div *ngFor="let item of items">
  <span (click)="toggleMenu(item, $event)">{{item.label}}</span>
  <!-- 仅当前菜单展开时显示子项 -->
  <ng-container *ngIf="item.nestedItems && item.isExpanded">
    <div *ngFor="let nestedItem of item.nestedItems" class="nav-nestedItem-label">
      {{nestedItem.label}}
    </div>
  </ng-container>
</div>

拓展说明

如果需要实现同一时间仅展开一个菜单的效果,只需将单个item的isExpanded字段替换为全局变量activeMenuLabel,切换时判断当前点击项的label是否等于activeMenuLabel即可,逻辑如下:

// ts中新增全局变量
activeMenuLabel = '';

// 修改toggle方法
toggleMenu(item: MenuItem, event: MouseEvent): void {
  if (item.nestedItems?.length) {
    event.stopPropagation();
    event.preventDefault();
    this.activeMenuLabel = this.activeMenuLabel === item.label ? '' : item.label;
  }
}
<!-- html中修改判断条件 -->
<ng-container *ngIf="item.nestedItems && activeMenuLabel === item.label">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:15:03