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

Angular Material导航栏子菜单失效 mat-menu数据不渲染问题咨询

导航栏子菜单失效问题定位与修复

核心问题原因

  • 模板作用域错位:#submenu定义的<mat-menu>组件放在了*ngFor循环的外部,脱离了循环作用域,根本无法访问循环内每一项的link变量,自然拿不到对应的子菜单数据,触发时也找不到正确的菜单实例。
  • 菜单实例冲突:所有带下拉的父菜单项都绑定了同一个#submenu引用,没有给不同的父菜单项分配独立的菜单实例,就算位置正确也会出现所有下拉共用同一个空数据菜单的问题。
  • 无效渲染逻辑:子菜单内部嵌套了两层ng-container,重复判断子菜单长度,既增加渲染开销,也没有实际逻辑收益。

修复方案与可运行代码

调整思路:

  • 把<mat-menu>的定义移入每个*ngFor循环的内部作用域,让每个菜单实例可以直接读取当前循环项的子菜单数据
  • 给每个父菜单项绑定的触发器分配独立的本地模板引用,避免多个菜单项共用同一个菜单实例
  • 删掉冗余的嵌套判断逻辑,直接在菜单内部循环渲染子项

修复后的代码:

<mat-nav-list class="navigation relative">
  <div *ngFor="let link of navLinks; let i=index" style="padding-bottom: 14px;">
    <div class="card">
      <mat-list-item appAccordionlinks routerLinkActive="active-link" (click)="onClick(link.name)">
        <!-- 带子菜单的导航父项 -->
        <ng-container *ngIf="link?.submenu?.length > 0">
          <a mat-button [matMenuTriggerFor]="currentSubmenu" appAccordiontoggle class="relative main-active">
            <mat-icon *ngIf="link.icon">{{link.icon}}</mat-icon>
            <img class="menu-img" *ngIf="link.img" [src]="link.img" alt="">
            <app-menu-icon *ngIf="link.img" [name]="'employee'"></app-menu-icon>
            <span>{{link.name}}</span><span fxFlex></span>
          </a>
          <!-- 独立作用域内的子菜单实例 -->
          <mat-menu #currentSubmenu="matMenu">
            <button mat-menu-item *ngFor="let sublink of link.submenu">
              <img class="menu-img" *ngIf="sublink.img" [src]="sublink.img">
              <span>{{sublink.name}}</span>
            </button>
          </mat-menu>
        </ng-container>

        <!-- 无下拉的普通导航项 -->
        <a *ngIf="!(link?.submenu?.length > 0)" [routerLink]="link.path" appAccordiontoggle
            class="relative main-active" mat-ripple fxLayout="row">
          <mat-icon *ngIf="link.icon">{{link.icon}}</mat-icon>
          <app-menu-icon *ngIf="link.img" [name]="link.name" [color]="link.color"></app-menu-icon>
          <span>{{link.name}}</span>
        </a>
      </mat-list-item>
    </div>
  </div>
</mat-nav-list>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 02:45:03