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

数组索引不唯一时如何实现Vue/Nuxt手风琴菜单单选效果?

核心解决思路

你遇到的问题本质是不同层级分组下的索引重复,无需手动给每个问题加ID,直接利用现有数据的层级键名拼接出唯一标识即可解决。你的questionRows数据从行到分类再到问题,每一层的键名在父级下都是唯一的,把这些键名拼接起来就能得到全局唯一的标识。


具体修改方案

1. 模板代码调整

不用修改原有JS逻辑,只需要调整模板里的v-for参数、激活判断和点击传参即可:

<!-- 直接遍历整个questionRows,无需分开写row1和row2的重复代码 -->
<div v-for="(row, rowKey) in questionRows" :key="rowKey">
  <div v-for="(category, categoryKey) in row" :key="`${rowKey}-${categoryKey}`">
    <div class="flex items-center mb-3">
      <h3 class="text-blue text-lg font-bold">{{ category.title }}</h3>
    </div>
    <div class="flex flex-col gap-3">
      <!-- 拿到问题层的键名questionKey,拼接行、分类、问题三层的键名得到唯一标识 -->
      <div v-for="(question, questionKey) in category.questions" :key="`${rowKey}-${categoryKey}-${questionKey}`">
        <div :class="{ 'active-class' : isActive === `${rowKey}-${categoryKey}-${questionKey}`}" class="justify-between w-full min-h-min  bg-white rounded-2xl select-none">
          <!-- 点击时传入拼接好的唯一标识 -->
          <div class="cursor-pointer" @click="toggleItem(`${rowKey}-${categoryKey}-${questionKey}`)">
            <div :class="{'pb-5' : isActive !== `${rowKey}-${categoryKey}-${questionKey}`}" class="flex justify-between items-center text-button pt-6 pl-10 pr-7">
              <h3 class="font-bold">{{ question.question }}</h3>
              <font-awesome-icon v-if="isActive === `${rowKey}-${categoryKey}-${questionKey}`" :icon="['fas', 'sort-up']"/>
              <font-awesome-icon v-else :icon="['fas', 'sort-down']"/>
            </div>
          </div>
          <p v-if="isActive === `${rowKey}-${categoryKey}-${questionKey}`" class="mt-3 text-sm text-blue pl-10 pr-7 pb-5">
            {{ question.answer }}
          </p>
        </div>
      </div>
    </div>
  </div>
</div>

2. JS逻辑无需修改

你原本的toggleItem方法完全可以复用,不需要做任何调整,只需要注意isActive默认值保持null即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:54:00