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

如何将vee-validate与vue-datepicker整合实现必填字段校验?

解决vee-validate与vue-datepicker的必填校验问题

问题根源:当前代码中Field组件内部的input仅通过:value="value"单向绑定了日期选择器的值,但未将日期变化同步回vee-validate的表单状态,导致校验状态无法更新——即使选择日期后,错误提示仍会保留,表单无法提交。

修正方案

方法一:同步输入事件与Field状态

复用datepicker插槽提供的inputEvents,让日期选择的事件触发vee-validate的字段状态更新:

<Form @submit="handleEvent" :validation-schema="addEventSchema">
  <VueDatePicker
    v-model="eventDate.startDate"
    text-input
    hide-input-icon
    :enable-time-picker="false"
    :clearable="false"
    model-type="yyyy-MM-dd"
    format="yyyy-MM-dd"
  >
    <template #dp-input="{ value, inputEvents }">
      <Field 
        name="startDate" 
        v-slot="{ field, errors }"
      >
        <input
          type="text"
          v-bind="field"
          v-bind="inputEvents"
          class="form-control form-control-lg form-control-outlined"
          :class="{ 'is-invalid': !!errors.length }"
          placeholder="Start Date"
          :value="value"
          autocomplete="off"
        />
      </Field>
      <label class="form-label-outlined" for="outlined-date-picker">
        Start Date
      </label>
      <ErrorMessage class="invalid-feedback" name="startDate" />
    </template>
  </VueDatePicker>
  <button type="submit">Submit</button>
</Form>

方法二:直接用Field作为日期输入载体

省略手动编写input,将Field组件与datepicker的插槽参数直接绑定,简化代码:

<Form @submit="handleEvent" :validation-schema="addEventSchema">
  <VueDatePicker
    v-model="eventDate.startDate"
    text-input
    hide-input-icon
    :enable-time-picker="false"
    :clearable="false"
    model-type="yyyy-MM-dd"
    format="yyyy-MM-dd"
  >
    <template #dp-input="{ value, inputEvents }">
      <Field 
        name="startDate"
        type="text"
        v-bind="inputEvents"
        :value="value"
        v-slot="{ errors }"
        class="form-control form-control-lg form-control-outlined"
        :class="{ 'is-invalid': !!errors.length }"
        placeholder="Start Date"
      />
      <label class="form-label-outlined" for="outlined-date-picker">
        Start Date
      </label>
      <ErrorMessage class="invalid-feedback" name="startDate" />
    </template>
  </VueDatePicker>
  <button type="submit">Submit</button>
</Form>

校验规则注意事项

确保你的校验schema中startDate的规则匹配实际场景,比如使用yup定义必填规则:

import { object, string } from 'yup';

const addEventSchema = object({
  startDate: string().required('Start date is required')
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:50:18