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

Vue2中Vuetify导航抽屉点击菜单项意外展开的解决方法

解决Vuetify导航抽屉点击菜单项意外展开的问题

问题核心:Vuetify的v-navigation-drawer在mini-variant模式下,默认会监听抽屉内的点击事件来切换展开状态。当点击带有link属性的列表项时,事件会冒泡到抽屉组件,导致抽屉意外展开。

解决方案

给每个列表项添加@click.stop指令,阻止事件冒泡到导航抽屉,从而避免触发自动展开行为。

修改后的列表项代码片段:

<v-list dense>
  <v-list-item
    v-for="item in items"
    :key="item.title"
    link
    @click.stop
  >
    <v-list-item-icon>
      <v-icon>{{ item.icon }}</v-icon>
    </v-list-item-icon>

    <v-list-item-content>
      <v-list-item-title>{{ item.title }}</v-list-item-title>
    </v-list-item-content>
  </v-list-item>
</v-list>

如果需要为列表项添加自定义点击逻辑,只需在@click.stop后绑定处理函数即可,示例:

@click.stop="handleItemClick(item)"

完整修改代码

JavaScript 部分

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  data () {
    return {
      drawer: true,
      items: [
        { title: 'Home', icon: 'mdi-home-city' },
        { title: 'My Account', icon: 'mdi-account' },
        { title: 'Users', icon: 'mdi-account-group-outline' },
      ],
      mini: true,
    }
  },
  methods: {
    handleItemClick(item) {
      // 自定义点击逻辑,例如跳转页面、触发弹窗等
      console.log('点击菜单:', item.title)
    }
  }
})

HTML 部分

<div id="app">
  <v-app id="inspire">
    <v-card>
      <v-navigation-drawer
        v-model="drawer"
        :mini-variant.sync="mini"
        permanent
      >
        <v-list-item class="px-2">
          <v-list-item-avatar>
            <v-img src="https://randomuser.me/api/portraits/men/85.jpg"></v-img>
          </v-list-item-avatar>

          <v-list-item-title>John Leider</v-list-item-title>

          <v-btn
            icon
            @click.stop="mini = !mini"
          >
            <v-icon>mdi-chevron-left</v-icon>
          </v-btn>
        </v-list-item>
        
         <div
        :style="{ display: mini ? 'block' : 'none' ,paddingLeft: '20px', paddingTop: '5px', paddingBottom: '5px' }"
      >
        <v-icon
          @click="mini = !mini"
        > mdi-chevron-right </v-icon>
      </div>

        <v-divider></v-divider>

        <v-list dense>
          <v-list-item
            v-for="item in items"
            :key="item.title"
            link
            @click.stop="handleItemClick(item)"
          >
            <v-list-item-icon>
              <v-icon>{{ item.icon }}</v-icon>
            </v-list-item-icon>

            <v-list-item-content>
              <v-list-item-title>{{ item.title }}</v-list-item-title>
            </v-list-item-content>
          </v-list-item>
        </v-list>
      </v-navigation-drawer>
    </v-card>
  </v-app>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:46:07