在表格里面做自定义表单校验

思路

一、需要表格、表单、校验三个数据容器。

1、表格,只需要添加数据时,把动态key存入就行,name和age没用(可以不要)

2、表单,通过动态key拼接存入数据。方法入下

输入的input要绑定表单项,通过动态key,绑定不同的表单项,如下,input绑定方法

3、校验:每次点击新增的时都会通过key添加动态校验

form-item也要绑定动态校验(也是通过key区分)如下:

需要配置的地方

1、点击添加,添加动动态表格数据、动态表单数据、动态校验,唯一变要变化的key

2、配置动态prop与动态v-model绑定就好了

<template>
  <el-dialog title="" :visible.sync="dialogVisible" width="790px" height="700px">
    <div class="tr mb-16">
      <el-button @click="addData">添加数据</el-button>
    </div>
    <el-form :model="form" :rules="rules" class="mb-24">
      <el-table :data="data" stripe>
        <el-table-column prop="name" label="姓名">
          <template slot-scope="scope">
            <el-form-item label="" :prop="'name'+'-'+scope.row.key">
              <el-input v-model="form['name'+'-'+scope.row.key]"></el-input>
            </el-form-item>
          </template>
        </el-table-column>
        <el-table-column prop="age" label="年龄">
          <template slot-scope="scope">
            <el-form-item label="" :prop="'age'+'-'+scope.row.key">
              <el-input v-model="form['age'+'-'+scope.row.key]"></el-input>
            </el-form-item>
          </template>
        </el-table-column>
      </el-table>
    </el-form>
  </el-dialog>
</template>

<script>
export default {
  data() {
    return {
      dialogVisible:false,
      data: [], //表格数据
      form: {},//表单数据
      rules: {},//校验数据
      key:0,//因为数据都是添加的,需要一个key区分
    }
  },
  methods:{
    //打开弹框
    open(){
      this.dialogVisible=true
    },
    // 点击添加数据
    addData(){
      this.key++
      // 给表格添加数据
      this.data.push({key:this.key})
      // 给表单添加数据(用来绑定input的v-model)----重点1----
      // 1、添加姓名输入框绑定的对象(应为有key不一样,所以不会覆盖)
      this.$set(this.form,'name'+'-'+this.key,'')
      // 2、添加年龄输入框绑定的对象
      this.$set(this.form,'age'+'-'+this.key,'')
      // 动态添加校验(每次新增时,添加校验)------重点2-------
      this.$set(this.rules,'name'+'-'+this.key,[ { validator: this.validatePass, trigger: 'blur' }])
      this.$set(this.rules,'age'+'-'+this.key,[ { validator: this.validatePass, trigger: 'blur' }])
    },
    // 验证器函数
    validatePass(rule, value, callback){
      console.log(rule, value,'????');
      let str=rule.field.split('-')[0]
      if(value===''){
        if(str=='name'){
          callback(new Error('请输入姓名'))
        }else{
          callback(new Error('请输入年龄'))
        }
      }else{
        callback()
      }

    }
  }
}
</script>

<style lang="scss" scoped>
>>>.el-table {
  font-size: 14px;
  font-family: PingFangSC-Regular, PingFang SC;
  font-weight: 400 !important;
  border: 1px solid #e8eaec !important;
}
</style>

在Element UI中,如果你需要在一个表单内嵌入一个表格并进行多行数据的自定义校验和关联性校验,可以这样: **1. 表单内嵌表格:** 首先,在`<el-form>`里添加一个`<el-table>`作为表格容器,并在每一行数据旁边提供对应的编辑字段。例如: ```html <el-form :model="formData"> <el-table :data="tableData" border> <el-table-column prop="name" label="名称"></el-table-column> <!-- 其他列... --> <el-table-column label="操作"> <template slot-scope="scope"> <el-form-item label=""> <!-- 编辑按钮或其他操作 --> </el-form-item> </template> </el-table-column> </el-table> </el-form> ``` **2. 多行数据自定义校验:** 对于每条数据,可以在`rules`对象中为每个字段指定验证规则。比如,如果某列数据要求非空,可以这样设置: ```javascript data() { return { formData: { tableData: [ { id: '', name: '' }, { id: '', name: '' }, //... ], rules: { tableData: { 每一项: { name: [{ required: true, message: '名称不能为空', trigger: 'blur' }] } } } } }; } ``` **3. 关联性校验(假设表单有其他关联字段):** 如果表格的数据和表单的其他部分存在关联关系,例如表格中的ID需要对应另一个表单字段的选择值,可以在`watch`或`computed`中进行验证。例如: ```javascript watch: { selectedId (newValue, oldValue) { if (newValue && this.tableData.find(item => item.id === newValue)) { this.formData.someRelatedField = this.tableData.find(item => item.id === newValue).someProperty; } else { this.formData.someRelatedField = ''; } } } ``` 这里假设`selectedId`是从另一个表单字段获取的ID,当ID改变时会进行关联性验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值