el-date-picker的表单校验问题

3,174 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

  1. 需要注意的是,若:model="taskForm",则日期选择器的v-model="taskForm.reportDate",因rules是基于表单进行校验的,所以当prop为reportDate时,会自动查找this.taskForm.reportDate的值;
  2. 在校验的时候需注意reportDate的type为'array',且使用fileds分开为开始日期和结束日期进行校验:

表单内容如下:

<el-dialog :title="title" :visible.sync="open" width="700px"  append-to-body>
  <el-form ref="taskForm" :model="taskForm" :rules="rules" label-width="80px">
    <el-form-item label="任务名称" prop="taskName">
      <el-input v-model="taskForm.taskName" placeholder="请输入任务名称" />
    </el-form-item>
    <el-form-item label="填报人" prop="userIds" style="margin-top: 20px">
      <el-select v-model="taskForm.userIds" multiple clearable style="width: 100%">
        <el-option v-for="item in userOptions" :key="parseInt(item.userId)" :label="item.nickName" :value="parseInt(item.userId)" />
      </el-select>
    </el-form-item>
    <el-form-item label="填报期限" prop="reportDate" style="margin-top: 20px">
      <el-date-picker
        value-format="yyyy-MM-dd HH:mm:ss"
        v-model="taskForm.reportDate"
        type="datetimerange"
        :picker-options="pickerOptions"
        range-separator="至"
        start-placeholder="开始时间"
        end-placeholder="截止时间"
        align="right">
      </el-date-picker>
    </el-form-item>
    <el-form-item label="填报说明" prop="taskDesc" style="margin-top: 20px">
      <el-input  type="textarea" v-model="taskForm.taskDesc" placeholder="请输入填报说明" />
    </el-form-item>
  </el-form>
  <div slot="footer" class="dialog-footer">
    <el-button type="primary" @click="submitForm">确 定</el-button>
    <el-button @click="cancel">取 消</el-button>
  </div>
</el-dialog>

校验规则如下:

rules: {
  taskName:[
    {required: true, message: '请输入任务名称', trigger: 'blur'}
  ],
  userIds:[
    { required: true, message: '请选择填报人', trigger: 'change' }
  ],
  reportDate:[
    { type:'array',required: true, message: '请选择填报时间',
    fields:{
      0:{type:'string',required:true,message:'请选择开始日期'},
      1:{type:'string',required:true,message:'请选择结束日期'}
    }}
  ],
  taskDesc:[
    {required: true, message: '请输入填报说明', trigger: 'blur'}
  ]
},

element-ui 表单验证触发方式 trigger :'change' 和 'blur' 的区别:

trigger :'change' change 数据改变触发 比如:需要 手动选择的东西,用 change ; trigger : 'blur', blur 失去焦点 比如:输入框里,验证文本框是否为空没有任何输入的时候,不会触发change但一定会触发 blur 事件