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

如何让Vuetify日期选择器与输入框同步并实时更新?

解决v-date-picker弹窗打开时手动输入日期不同步的问题
  • 方法一:调用组件内部更新方法(推荐)
    给日期选择器添加ref引用,在输入框的@input事件处理函数中,更新绑定的日期值后,手动调用组件的内部更新方法同步日历面板:

    Vue 2示例:

    <template>
      <v-date-picker
        v-model="selectedDate"
        ref="datePicker"
        persistent
      ></v-date-picker>
      <input
        v-model="inputDate"
        @input="handleInput"
      >
    </template>
    
    <script>
    export default {
      data() {
        return {
          selectedDate: null,
          inputDate: ''
        }
      },
      methods: {
        handleInput() {
          // 完成输入日期的格式校验与转换
          const validDate = this.formatInputDate(this.inputDate)
          if (validDate) {
            this.selectedDate = validDate
            // 同步更新日历面板
            this.$nextTick(() => {
              if (this.$refs.datePicker) {
                this.$refs.datePicker.internalValue = this.selectedDate
                this.$refs.datePicker.updatePicker()
              }
            })
          }
        },
        formatInputDate(dateStr) {
          // 实现日期格式转换逻辑,返回符合v-date-picker要求的格式(如'YYYY-MM-DD')
        }
      }
    }
    </script>
    

    Vue 3 + Vuetify 3示例:

    <template>
      <v-date-picker
        v-model="selectedDate"
        ref="datePicker"
        persistent
      ></v-date-picker>
      <input
        v-model="inputDate"
        @input="handleInput"
      >
    </template>
    
    <script setup>
    import { ref, nextTick } from 'vue'
    const selectedDate = ref(null)
    const inputDate = ref('')
    const datePicker = ref(null)
    
    const handleInput = async () => {
      const validDate = formatInputDate(inputDate.value)
      if (validDate) {
        selectedDate.value = validDate
        await nextTick()
        if (datePicker.value) {
          datePicker.value.internalValue = selectedDate.value
          datePicker.value.updatePicker()
        }
      }
    }
    
    const formatInputDate = (dateStr) => {
      // 日期格式转换逻辑
    }
    </script>
    
  • 方法二:强制组件重渲染
    给v-date-picker添加动态key,当日期更新时改变key值,触发组件重新渲染以同步新选中日期:

    <template>
      <v-date-picker
        v-model="selectedDate"
        :key="pickerKey"
        persistent
      ></v-date-picker>
      <input
        v-model="inputDate"
        @input="handleInput"
      >
    </template>
    
    <script>
    export default {
      data() {
        return {
          selectedDate: null,
          inputDate: '',
          pickerKey: 0
        }
      },
      methods: {
        handleInput() {
          const validDate = this.formatInputDate(this.inputDate)
          if (validDate) {
            this.selectedDate = validDate
            // 改变key触发重渲染
            this.pickerKey += 1
          }
        },
        formatInputDate(dateStr) {
          // 日期格式转换逻辑
        }
      }
    }
    </script>
    

注意:方法二属于强制重渲染,会重置组件的当前视图状态(比如当前显示的月份),如果需要保留日历的浏览位置,优先使用方法一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:01:33