iview 表单提交数据的时候验证问题

问题描述: iview Form表单提交时因数据格式不统一,有写数据表单里面含有数组,验证出现问题


1, iview表单验证的步骤

  • 1, Form 标签里面需要写上 ref="FormData" :model="FormData" :rules="ruleValidate"

  • 2, 给需要验证的每个 FormItem标签 设置prop="address" 属性

  • 3, Input标签里面是 v-model="address"

  • 4, 在操作保存按钮时,添加方法验证对整个表单进行校验

this.$refs[name].validate((valid) => {
  if (valid) {
    ...
  }
}
复制代码

2, 因为表单数据格式的原因无法正常验证表单

  • 后端给的需要提交的数据格式如下
// 表单需要提交的数据
  FormData: any = {
    TeacherName: '',
    address: '',  // 老师的地址 需要进行必填字段验证
    StudentOne: [
      {
        name: '',
        age: '',
        address: '',
        sex: ''  // 需要进行必填字段验证
      }
    ],
    StudentTwo: [
      {
        name: '',
        age: '',
        address: '',
        sex: ''  // 需要进行必填字段验证
      }
    ]
  }
复制代码

3, 错误代码如下:

  • html部分代码如下
<Form ref="FormData" :model="FormData" :rules="ruleValidate" :label-width="100">
    <!-- 班主任  信息 -->
    <FormItem label="班主任姓名:" prop="TeacherName">
        <Input v-model="FormData.TeacherName" placeholder="请输入班主任姓名"></Input>
    </FormItem>
    <FormItem label="班主任地址:" prop="address">
        <Input v-model="FormData.address" placeholder="请输入班主任地址"></Input>
    </FormItem>
    
    
    <!-- 学生1 信息 -->
    <FormItem label="学生1姓名:" prop="name">
        <Input v-model="FormData.StudentOne[0].name" placeholder="请输入学生1的姓名"></Input>
    </FormItem>
    <FormItem label="学生1性别:" prop="sex">
        <Input v-model="FormData.StudentOne[0].sex" placeholder="请输入学生1的性别"></Input>
    </FormItem>
     <FormItem label="学生1地址:" prop="address">
        <Input v-model="FormData.StudentOne[0].address" placeholder="请输入学生1地址"></Input>
    </FormItem>
    
    <!-- 学生2 信息 -->
    <FormItem label="学生2姓名:" prop="name">
        <Input v-model="FormData.StudentTwo[0].name" placeholder="请输入学生2的姓名"></Input>
    </FormItem>
    <FormItem label="学生2性别:" prop="sex">
        <Input v-model="FormData.StudentTwo[0].sex" placeholder="请输入学生2的性别"></Input>
    </FormItem>
    <FormItem label="学生2地址:" prop="address">
        <Input v-model="FormData.StudentTwo[0].address" placeholder="请输入学生2地址"></Input>
    </FormItem>
</Form>
复制代码
  • 验证规则代码如下
ruleValidate: any = {
    // 如果html代码如上,这个验证规则的情况下是三个地址都会验证的,是哪个地址都成了必填项
    // 但是我们现在只需要必填老师的地址, 而两个学生的地址是不必填的
    // 并且这样性别是验证不到的
   address: [
      { required: true, message: '请输入班主任地址', trigger: 'blur' }
   ],
   sex: [
      { required: true, message: '请输入学生1性别', trigger: 'blur' }
   ]
}
复制代码

4, 正确代码如下:

  • html部分代码如下
<Form ref="FormData" :model="FormData" :rules="ruleValidate" :label-width="100">
    <!-- 班主任  信息 -->
    <FormItem label="班主任姓名:" prop="editName">
        <Input v-model="FormData.editName" placeholder="请输入班主任姓名"></Input>
    </FormItem>
    <FormItem label="班主任地址:" prop="address">
        <Input v-model="FormData.address" placeholder="请输入班主任地址"></Input>
    </FormItem>
    
    
    <!-- 学生1 信息 -->
    <FormItem label="学生1姓名:" prop="StudentOne[0].name">
        <Input v-model="FormData.StudentOne[0].name" placeholder="请输入学生1的姓名"></Input>
    </FormItem>
    <FormItem label="学生1性别:" prop="StudentOne[0].sex">
        <Input v-model="FormData.StudentOne[0].sex" placeholder="请输入学生1的性别"></Input>
    </FormItem>
     <FormItem label="学生1地址:" prop="StudentOne[0].address">
        <Input v-model="FormData.StudentOne[0].address" placeholder="请输入学生1地址"></Input>
    </FormItem>
    
    <!-- 学生2 信息 -->
    <FormItem label="学生2姓名:" prop="StudentTwo[0].name">
        <Input v-model="FormData.StudentTwo[0].name" placeholder="请输入学生2的姓名"></Input>
    </FormItem>
    <FormItem label="学生2性别:" prop="sex">
        <Input v-model="FormData.StudentTwo[0].sex" placeholder="请输入学生2的性别"></Input>
    </FormItem>
    <FormItem label="学生2地址:" prop="address">
        <Input v-model="FormData.StudentTwo[0].address" placeholder="请输入学生2地址"></Input>
    </FormItem>
</Form>
复制代码
  • 验证规则代码如下
ruleValidate: any = {
   address: [
      { required: true, message: '请输入班主任地址', trigger: 'blur' }
   ],
   'StudentOne[0].sex': [
      { required: true, message: '请输入学生1性别', trigger: 'blur' }
   ],
   'StudentTwo[0].sex': [
      { required: true, message: '请输入学生2性别', trigger: 'blur' }
   ]
}
复制代码

备注:

1, 如果提交表单对象里面含有数组层级关系, 需要在prop里面写出来这个层级关系

prop="TeacherName" ( FormData下面的数据 )
prop="StudentTwo[0].name" (FormData 下面数组里面的数据 )
复制代码

2, 同时在验证的时候也需要写成层级关系,并且加上引号,如果不加引号会报错

验证关系里面需要这样写-----> 'StudentOne[0].sex'
复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值