Angular Material的展开面板不起作用

前端开发 2026-07-08

我正在做一个使用Angular Material 21.2.7的项目,但我的Angular展开面板无法正常工作。

展开面板 在此输入图片描述

展开面板的子项是存在的,但在主菜单的箭头被点击时并不会展开。

展开面板的代码如下。

@for(cat of productCategories();track cat)
{   
 <mat-accordion> 
  <mat-expansion-panel class="custom-panel">
    <mat-expansion-panel-header class="mainmenu">
      <mat-panel-title> 
          {{cat.name}} 
      </mat-panel-title>      
    </mat-expansion-panel-header>     
      <div class="menucontenta">      
        @for(subcat of cat.productSubCategories;track subcat)
        {    
          <li class="submenuitem">
            <a [routerLink]="['ProductSubCatogory',subcat.id]" id="sub{{subcat.id}}">{{subcat.name}}</a>
          </li>
        }       
      </div>   
  </mat-expansion-panel>
</mat-accordion> 
}

当我新建另一个Angular项目并运行上述代码时,它工作正常。在浏览器开发者工具中,控制台标签页显示了以下警告列表:

浏览器开发者工具控制台标签页

完整的错误详情如下。

在此输入图片描述

我的Angular项目是否缺少某些包?

解决方案

错误信息已经指向了可能的原因。检查你在 utils.js 中调用的那一行所引用的位置:

yourItems.map(...)

控制台指出,在执行 map() 时,yourItemsundefined。由于 map() 只能在数组上调用,在 undefined 上尝试调用它会抛出此错误。

排查要点:

  1. 验证 yourItems 是否被正确初始化。
  2. 检查数据是否以异步方式加载,代码运行时可能尚不可用。
  3. 在调用 map() 之前添加一个保护条件:
yourItems?.map(item => {
  // ...
});

if (Array.isArray(yourItems)) {
  yourItems.map(item => {
    // ...
  });
}

如果你仍然不确定,请提供来自 utils.js 的相关代码,以及完整的错误堆栈跟踪,这样他人就能确切地找出 yourItems 变成 undefined 的位置。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章