Vue2 ant-design 设置mode=“[‘month‘, ‘month‘]“时,选择时间后弹框不关闭

在这里插入图片描述
废话不多说,直接上代码:

<template>
  <div class="page-main">
    <a-range-picker
       value-format="YYYY-MM"
       format="YYYY-MM"
       v-model="billMonth"
       :open="monthPickShow"
       @panelChange="handlePanelChange"
       @openChange="handleOpenChange"
       :mode="['month', 'month']"
       id="timePicker"
     />
  </div>
</template>
<script>
import moment from 'moment'

export default {
  name: 'monthPiker',
  data() {
    return {
      monthPickShow: false,
      billMonth: [],
    }
  },
  methods: {
    handlePanelChange(value, mode) {
      // mode 的值为 'date' 时,即是选择了时间
      this.monthPickShow = mode[1] === 'date' ? false : true
      this.billMonth = [moment(value[0]).format('YYYY-MM'), moment(value[1]).format('YYYY-MM')]
    },
    handleOpenChange(status) {
      this.monthPickShow = status ? true : false
    },
</script>

旨在分享~~~~~~~~~~~~~~~

### 解决 Ant Design Vue Range-Picker 自动关闭问题 在 Ant Design Vue 中,`RangePicker` 组件认行为是在用户完成日期或时间选择后自动关闭窗。然而,在某些场景下(例如选择月份区间),这种行为可能符合需求[^1]。 #### 问题分析 当 `RangePicker` 被配置为选择月份范围认情况下组件会在用户点击确认按钮或者两次选择完成后触发关闭逻辑。这是由于内部事件处理机制决定的,即一旦满足条件便会调用隐藏方法来收起日历面板[^2]。 如果希望阻止此认动作,则可以通过自定义方式干预其交互流程实现保持打开状态的效果。 #### 实现方案 以下是几种可行的方法: 1. **通过 controlled mode 控制可见性** 使用 `open` 属性绑定到父级的状态变量上,并监听相关回调函数如 `onOpenChange` 来手动管理显示/隐藏的行为。 ```vue <template> <a-range-picker :picker="&#39;month&#39;" v-model="dates" @panel-change="handlePanelChange" :open="isOpen" @openChange="handleOpenChange"> </a-range-picker> </template> <script> export default { data() { return { dates: [], isOpen: true, }; }, methods: { handlePanelChange(value, mode){ console.log(&#39;Selected Panel Change:&#39;, value, mode); }, handleOpenChange(status){ this.isOpen = status; // 可在此处加入额外判断逻辑防止特定条件下改变status } } }; </script> ``` 2. **利用 stopPropagation 阻断冒泡** 对于更细粒度控制的需求来说,可以尝试捕获并停止事件传播至更高层从而避免触发必要的副作用。过这种方法相对复杂且容易引入新的兼容性隐患因此推荐谨慎采用。 3. **定制化扩展原生功能** 如果上述两种途径仍无法完全适配业务诉求的话,考虑基于源码二次开发一个新的控件版本也许是最彻底但也最耗资源的一种选项了。 以上三种策略各有优劣需依据实际项目背景权衡选用最为合适的那一种[^3]。 ```javascript // 示例代码片段展示如何动态调整 open 状态 this.$refs.rangePickerRef.open = false; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值