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

如何用Vue+Vuetify实现菜单展开时chevron上翻、收起时下翻的效果?

问题根源

你之前的方案不生效有两个核心原因:

  • 自行维护布尔值的方案没有监听菜单的外部关闭事件,点击外部关闭时状态不会同步更新
  • attrs['aria-expanded']属于非响应式的原生DOM属性集合,值变化不会触发Vue视图重渲染,所以控制台能看到属性变化但图标不切换

最简解决方案

Vuetify 的 v-menu 组件的 activator 作用域插槽本身就暴露了响应式的激活状态变量 value,直接用这个变量判断即可,无需自己维护状态,不管是点击按钮切换还是点击外部区域关闭,value 都会自动同步更新。

修正后的完整代码如下:

<v-menu offset-y>
  <!-- 解构插槽暴露的响应式状态 value -->
  <template v-slot:activator="{on, attrs, value}">
    <v-btn
      class="mt-6 v-btn--glow"
      color="primary"
      dark
      v-bind="attrs"
      v-on="on"
    >
      Dropdown
      <v-icon v-if="value" right>mdi-chevron-up</v-icon>
      <v-icon v-else right>mdi-chevron-down</v-icon>
    </v-btn>
  </template>
  <v-list>
    <v-list-item>
      <v-list-item-title>$ Fees & Rates</v-list-item-title>
    </v-list-item>
  </v-list>
</v-menu>

你也可以通过动态绑定图标名简化代码,不用写两个 v-icon 标签:

<v-icon right>{{ value ? 'mdi-chevron-up' : 'mdi-chevron-down' }}</v-icon>

另外你示例代码中的列表闭合标签存在笔误,把</v-list>误写为</v-list-item>,可以一并修正。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:45:09