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

Angular+PrimeNG嵌套手风琴:切换外层时内层自动关闭问题

解决PrimeNG嵌套手风琴外层折叠后内层状态丢失的问题

问题原因

你当前的代码中,所有手风琴的[activeIndex]都硬编码为0。当外层手风琴折叠时,内层手风琴的DOM会被隐藏(或组件重新初始化),再次展开外层时,内层手风琴会重新读取硬编码的0,导致之前手动展开的状态被重置。

解决方案

需要将每一层手风琴的激活索引绑定到组件类的变量,并监听索引变化事件来保存状态:

1. 在组件类中定义状态变量

在你的Angular组件.ts文件中,添加对应每一层手风琴的变量:

// 外层手风琴激活索引
outerAccordionIndex = 0;
// 第一层内层手风琴激活索引
innerAccordionIndex1 = 0;
// 第二层内层手风琴激活索引
innerAccordionIndex2 = 0;

2. 修改模板绑定变量与事件

将模板中每个手风琴的[activeIndex]绑定到对应变量,并添加activeIndexChange事件监听来更新变量:

<p-accordion [activeIndex]="outerAccordionIndex">
  <p-accordionTab header="Header I">
    <div>
      <p-accordion 
        [activeIndex]="innerAccordionIndex1"
        (activeIndexChange)="innerAccordionIndex1 = $event"
      >
        <p-accordionTab header="Header I">
          <p>111</p>
          <p-accordion 
            [activeIndex]="innerAccordionIndex2"
            (activeIndexChange)="innerAccordionIndex2 = $event"
          >
            <p-accordionTab header="Header I">
              <p>222</p>
            </p-accordionTab>
          </p-accordion>
        </p-accordionTab>
      </p-accordion>
    </div>
  </p-accordionTab>
</p-accordion>

原理说明

通过将激活索引绑定到组件类的变量,用户手动切换内层手风琴标签时,activeIndexChange事件会同步更新变量的值,状态被持久保存在组件中。当外层手风琴折叠再展开时,内层手风琴会读取变量中保存的最新索引,从而恢复之前的展开状态,不会被重置为默认的0。

内容的提问来源于stack exchange,提问作者ישראל גוטליב

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:47:14