vue.js - bootstrap-vue 如何在 b-dropdown 中包含 b-form-datepicker
问题描述
我正在构建一个下拉菜单日期选择器,并希望允许用户输入日期范围或可以选择预定日期范围。
有没有办法将 b-form-datepicker 包含在 b-dropdown 中?当我尝试打开日期选择器时,下拉菜单关闭。我试过阻止默认关闭操作,但这样做,我不能使用日期选择器。任何帮助或方向将不胜感激!
下面是一个简单的例子,展示了我想要做什么。
new Vue({
el: '#app',
data() {
return {
startDate: null,
endDate: null
}
},
methods: {
registerThisClick() {
console.log("this is clicked")
}
}
})
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.css" />
<script src="https://unpkg.com/vue@2.6.2/dist/vue.min.js"></script>
<script src="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.js"></script>
<div id="app">
<b-dropdown id="dropdown-divider" text="Dropdown with divider" menu-class="w-100" class="w-100" >
<template v-slot:default>
<b-dropdown-item>3 months</b-dropdown-item>
<b-dropdown-item>6 months</b-dropdown-item>
<b-row>
<b-col cols="12" class="my-2" >
Start
<b-form-datepicker
id="datepicker-dateformat1"
:date-format-options="{ year: 'numeric', month: 'numeric', day: 'numeric' }"
locale="en"
v-model="startDate"
@click="registerThisClick"
></b-form-datepicker>
</b-col>
<b-col>
End
<b-form-datepicker
id="datepicker-dateformat2"
:date-format-options="{ year: 'numeric', month: 'numeric', day: 'numeric' }"
locale="en"
v-model="endDate"
@click="registerThisClick"
></b-form-datepicker>
</b-col>
</b-row>
</template>
</b-dropdown>
</div>
解决方案
尝试@hide
在您的下拉列表中使用以禁用正常单击/关闭并创建一个新按钮来触发关闭下拉列表。
鉴于没有很多开箱即用的支持,您可能需要考虑使用模态或其他一些 BV 组件。
<template>
<div id="app">
<div> {{ startDate }} </div>
<div> {{ endDate }} </div>
<div> {{ isCloseable }} </div>
<b-dropdown id="dropdown-divider" ref='dropdown' text="Dropdown with divider" menu-class="w-100" class="w-100" @hide='handleHide($event)' @hidden='isCloseable=false'>
<template v-slot:default>
<b-dropdown-item>3 months</b-dropdown-item>
<b-dropdown-item>6 months</b-dropdown-item>
<b-row>
<b-col cols="12" class="my-2" >
Start
<b-form-datepicker
id="datepicker-dateformat1"
ref="date1"
:date-format-options="{ year: 'numeric', month: 'numeric', day: 'numeric' }"
locale="en"
v-model="startDate"
></b-form-datepicker>
</b-col>
<b-col>
End
<b-form-datepicker
id="datepicker-dateformat2"
:date-format-options="{ year: 'numeric', month: 'numeric', day: 'numeric' }"
locale="en"
v-model="endDate"
></b-form-datepicker>
</b-col>
</b-row>
<b-dropdown-item @click='closeMe()'>Close me</b-dropdown-item>
</template>
</b-dropdown>
</div>
</template>
脚本:
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
@Component({
components: {
},
})
export default class HelloWorld extends Vue {
startDate = null
endDate = null
isCloseable = false;
handleHide(bvEvent) {
if (!this.isCloseable) {
bvEvent.preventDefault();
} else {
this.$refs.dropdown.hide();
}
}
closeMe() {
this.isCloseable = true;
this.$refs.dropdown.hide();
}
}
</script>
推荐阅读
- .net-core - Microsoft Hive ODBC 驱动程序在 .Net 核心应用程序中失败
- javascript - 我可以在 axios 中使用 HTTP COPY 请求吗?
- python - dask.visualize() 无法显示单词
- dax - DAX 查询 - 从 powerbi 中的表中过滤掉值
- business-objects - 使用 BO 进行多维分析
- python - Pandas\Python:如何计算列中最后一个相同值的数量
- amazon-web-services - Simba ODBC Athena 驱动程序无法与 IAM 配置文件身份验证连接
- php - the_field() 函数将值放在错误的位置
- android - Android adb 无法访问并在 Android Studio 中自行重启
- python - 在计算给定大型数据集的项目和频率后创建两个单独的文本文件