项目记录:el-table中的验证

项目记录:el-table中每行数据分别添加验证

在elementUI中,会有表单多层嵌套的prop校验与重置的需要.

el-form-item标签的:prop属性,必须是父级组件el-form中绑定model字段中的一个直接子属性.
比如:this.form.userInfo[0].name获取到,那么prop就需要设置成userInfo[0].name,来校验

例子

<el-form ref="form" :model="form">
	<span v-for="(item,index) in form.problemSingleArr">
           <el-form-item :label="item.label+':'" :prop="'problemSingleArr.' + index + '.'+ item.prop">
                  <el-input :autosize="{ minRows: 5}" type="textarea" v-model="item[item.prop]"
                      placeholder="请输入问题"></el-input>
              </el-form-item>
              <template v-for="(e, i) in item.arr ">
                  <el-form-item :prop="'problemSingleArr.'+ index + '.arr.' + i + '.'+ e.prop">
                      <el-radio-group v-model="e[e.prop]">
                          <template v-for="(j,x) in e.option">
                              <el-radio :label="j.label" style="display: block;">
                                  {{j.label}}
                                  <el-form-item :prop="'problemSingleArr.'+ index + '.arr.' + i + '.option.' + x + '.' + j.prop " style="display: inline-block;">    
                                      <el-input  v-model="j[j.prop] "  :placeholder=`请输入${j.label}选项对应的答案` class="radio-margin"></el-input>
                                  </el-form-item>
                              </el-radio>
                          </template>
                      </el-radio-group>
                  </el-form-item>
              </template>
      </span>
 </el-form>
form:{
	problemSingleArr: [
        {
               label: '问题1',
               prop: 'problemArea',
               problemArea: '',
               arr: [
                   {
                       label: 'A',
                       prop: 'problemSingle',
                       problemSingle: '',
                       option: [
                           {
                               label: 'A',
                               prop: 'problemTextA',
                               problemTextA: ''
                           }, {
                               label: 'B',
                               prop: 'problemTextB',
                               problemTextB: ''
                           }, {
                               label: 'C',
                               prop: 'problemTextC',
                               problemTextC: ''
                           }, {
                               label: 'D',
                               prop: 'problemTextD',
                               problemTextD: ''
                           }, 
                       ]
                   }
               ]
           },
	]
 }

在这里插入图片描述

使用prop+rules

 <el-form ref="tableFormRef" :model="form" size="mini" label-width="110px" :rules="formRules" hide-required-asterisk>
	<el-table :data="form.android_config" size="mini" :pagination="false" border>
          <el-table-column
            v-for="col in columns"
            :key="col.id"
            :prop="col.id"
            :label="col.name"
          >
            <template v-slot="scope">
                <el-form-item class="custom-item" label-width="0" style="margin-bottom: 0px;" :prop="`android_config.${scope.$index}.${col.id}`" :rules="formRules[col.id]">
                  <el-input v-model.trim="scope.row[col.id]" type="text" placeholder="请输入" size="mini">
                  </el-input>
                </el-form-item>
            </template>
          </el-table-column>
        </el-table>
</el-form>

验证部分

formRules: {
		//为例  trigger
        max_price: [rules.required, { pattern: /^\d{1,4}(\.\d{1,2})?$/, message: '请输入小于10000或最多保留两位小数的数字' }, { validator: (rule, value, callback) => {
          if ((value) {
          //判断条件
            callback(new Error('错误'))
          } else {
            callback()
          }
      } }],
 }
//验证某个属性:
this.$refs.tableFormRef.validateField('')
//清除验证:
this.$refs.tableFormRef.clearValidate([])


//提交前判断
this.$refs.tableFormRef.validate(valid => {
        if (!valid) return
		//提交操作
}

error属性+验证

 <el-form-item class="custom-item" label-width="0" style="margin-bottom: 0px;" :error="validatorMultPrice(scope)">

 </el-form-item>

验证:

validatorMultPrice({row,$index}){
	//处理返回错误信息:string
},

adjustError(){
	const errorList = R.pluck('validateMessage')(this.$refs.tableFormRef.fields)
	  if (errorList.length) {
	    this.$message.error('请输入正确的数据')
	    return false
	  }
	  return true
}
const bool = await this.adjustError()  
//提交操作

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值