返回

Vuetify v-select 禁用点击选中选项:全方位解决方案

vue.js

在 Vuetify v-select 菜单中禁用点击选择项目

问题

在 Vuetify 的 v-select 菜单中,默认情况下,选择菜单项后,菜单会自动关闭。然而,当在菜单中使用模板自定义项目时,模板中的项目可能不会表现出相同的行为。

解决方法

为了解决此问题,需要修改 Vuetify 的 close-on-click 选项。可以通过安装 vuetify-extended 插件来实现。

步骤

  1. 安装 vuetify-extended:

    npm install vuetify-extended
    
  2. 导入 vuetify-extended:

    import Vuetify from 'vuetify'
    import VuetifyExtended from 'vuetify-extended'
    Vue.use(VuetifyExtended)
    
  3. 注册 close-on-click 选项:

    const vuetify = new Vuetify({
      options: {
        vuetifyExtended: {
          closeOnSelect: true,
        },
      },
    })
    

代码示例

应用这些更改后,v-select 代码应如下所示:

<v-select
  :items="clients"
  dense
  item-text="full_name"
  item-value="id"
  label="Search by client"
  outlined
  v-model="clientSearch"
>
  <template v-slot:prepend-item>
    <v-list-item ripple @click="selectNone()">
      <v-list-item-content>
        <v-list-item-title>None</v-list-item-title>
      </v-list-item-content>
    </v-list-item>
    <v-list-item ripple @click="selectAll()">
      <v-list-item-content>
        <v-list-item-title>All</v-list-item-title>
      </v-list-item-content>
    </v-list-item>
  </template>
</v-select>

结论

通过这些修改,模板中的项目现在也将具有 close-on-click 属性。无论选择哪一项,v-menu 都会关闭。

常见问题解答

  1. 为什么默认情况下 close-on-click 不适用于模板中的项目?
    在 Vuetify 2.3.8 及更高版本中,对模板中的项目关闭 close-on-click 功能是默认的。

  2. 如何在不安装 vuetify-extended 插件的情况下解决此问题?
    可以使用 vuetify-extender 库来实现相同的目标。

  3. close-on-click 属性还可以用于其他 Vuetify 组件吗?
    是的,close-on-click 属性也可以应用于其他 Vuetify 组件,例如 v-autocomplete。

  4. 有什么替代方法可以关闭菜单?
    除了 close-on-click 属性之外,还可以使用 @change 事件侦听器或 programatically 关闭菜单。

  5. 如何自定义 close-on-click 的延迟?
    可以使用 close-on-click-delay 属性自定义 close-on-click 的延迟,以毫秒为单位。