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

Vue+Vuetify:点击按钮时如何仅显示单个循环生成的v-menu?

解决Vuetify中v-for渲染v-menu时仅打开单个菜单的问题

核心思路是放弃全局布尔值的v-model,改用存储当前激活菜单ID的方式,通过用户ID匹配来控制单个菜单的显示状态,具体实现步骤如下:

  1. 替换全局布尔变量
    把原来控制菜单显示的全局布尔值,改成存储激活菜单ID的变量:
data() {
  return {
    activeMenuId: null, // 初始无激活菜单
    users: [/* 你的用户数据数组 */]
  }
}
  1. 修改v-menu的绑定逻辑
    将v-menu的v-model从全局布尔值,改为判断当前用户ID是否等于激活ID:
<v-col v-for="userInfo in users" :key="userInfo.id">
  <v-btn @click="toggleMenu(userInfo.id)">打开菜单</v-btn>
  
  <v-menu 
    v-model="activeMenuId === userInfo.id"
    @close="activeMenuId = null"
  >
    <!-- 菜单内容示例 -->
    <v-list>
      <v-list-item>编辑用户</v-list-item>
      <v-list-item>删除用户</v-list-item>
    </v-list>
  </v-menu>
</v-col>
  1. 实现菜单切换逻辑
    添加点击按钮的切换方法,点击时如果当前菜单已激活就关闭,否则激活:
methods: {
  toggleMenu(userId) {
    this.activeMenuId = this.activeMenuId === userId ? null : userId
  }
}

关键说明

  • 每次点击按钮只会改变对应ID菜单的状态,其他菜单不受影响
  • 菜单的@close事件用于在点击页面其他区域关闭菜单时,重置激活ID,避免状态不一致
  • 这种方式天然支持同时仅打开一个菜单的需求,完全适配你的业务场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:45:35