返回

解决 Vuetify 中 AppDateTimePicker 选择日期后 VMenu 关闭问题

vue.js

在 Vuetify 中,当在 AppDateTimePicker 内选择日期时,VMenu 将关闭

问题

在 Vuetify 中,当一个 VMenu 包含一个 AppDateTimePicker(Vuetify 的 DatePicker)时,选择日期会导致 VMenu 也随之关闭。

解决方案

要防止 VMenu 关闭,需要在 AppDateTimePicker 上添加 close-on-content-click="false" 属性。

修改后的代码

<VMenu width="300" height="450" :scrim="true" >
  <template #activator="{ props }" v-slot:activator="{ on: { click } }">
    <VIcon class="cursor-pointer" icon="tabler-settings-plus" v-bind="props" @click="updateEditIndex(indexUpper)"></VIcon>
  </template>
  <VList>
    <VListItem v-for="(item, indexLower) in menuItems" :key="indexLower" :active="false">
      <div class="d-flex flex-column ml-2" v-if="item.type === 'checkbox'">
        <VCheckbox v-model="field[item.value]" :label="item.title" />
        <p class="text-body-2">{{ item.description }}</p>
      </div>
      <div class="d-flex flex-column ml-2" v-if="item.type === 'textfield'">
       /// Some Input Fields
      </div>
                          
      <div class="d-flex flex-column ml-2" v-if="item.type === 'date'">
        <AppDateTimePicker :label="item.title" placeholder="Pick up the date" v-model="field[item.value]"  close-on-content-click="false" />
      </div>
    </VListItem>
  </VList>
</VMenu>

常见问题解答

1. 为什么 AppDateTimePicker 会导致 VMenu 关闭?

默认情况下,VMenu 具有 close-on-content-click 属性设置为 true,这表示点击菜单内容将关闭菜单。

2. 为什么添加 close-on-content-click="false" 可以解决问题?

close-on-content-click 设置为 false 会禁用此行为,允许在 AppDateTimePicker 内选择日期而不会关闭菜单。

3. 是否有其他方法可以解决此问题?

另一种解决方法是使用一个自定义指令,在 AppDateTimePicker 上监听 click 事件并阻止 VMenu 关闭。

4. close-on-content-click 属性对其他组件有何影响?

close-on-content-click 属性仅影响 VMenu 组件的行为。对于其他组件,它不会产生任何效果。

5. 什么时候应该使用 close-on-content-click="false"

close-on-content-click="false" 应该仅在需要在 VMenu 中保持打开状态时使用。在其他情况下,最好将属性保持为 true,以遵循一致的用户体验准则。