elmentui中的tabel嵌套表单input的校验

elementui组件中提供了一个动态增减表单项的一个检验,因为el-form-item是动态加载的,所以不能直接使用prop来绑定表单校验的rules属性,而是要使用动态prop,要遵循的规则是:prop="'tableData.' + index + '.字段名'",再用rules属性指定对应校验规则
要实现tabel的表单校验,要使用动态prop+rules才能实现:

<template>
  <div class="container">
    <span>点击提交触发校验: </span>
    <el-button type="primary" @click="save()">提交</el-button>
    <el-form
      ref="form"
      :model="form"
      label-width="80px"
      class="demo-ruleForm"
      :rules="rules"
    >
      <el-table :data="form.tableData" border style="width: 100%">
        <el-table-column prop="name" label="姓名" width="350">
          <template slot-scope="scope">
            <el-form-item
              label=""
              :prop="'tableData.' + scope.$index + '.name'"
              :rules="rules['name']"
              label-width="0px"
            >
              <el-input
                v-model="scope.row.name"
                placeholder="请输入内容"
              ></el-input>
            </el-form-item>
          </template>
        </el-table-column>
        <el-table-column prop="age" label="年龄" width="350">
          <template slot-scope="scope">
            <el-form-item
              label=""
              :prop="'tableData.' + scope.$index + '.age'"
              :rules="rules['age']"
              label-width="0px"
            >
              <el-input
                v-model="scope.row.age"
                placeholder="请输入内容"
              ></el-input>
            </el-form-item>
          </template>
        </el-table-column>
        <el-table-column prop="address" label="地址">
          <template slot-scope="scope">
            <el-form-item
              label=""
              :prop="'tableData.' + scope.$index + '.address'"
              :rules="rules['address']"
              label-width="0px"
            >
              <el-input
                v-model="scope.row.address"
                placeholder="请输入内容"
              ></el-input>
            </el-form-item>
          </template>
        </el-table-column>
      </el-table>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        tableData: [{
          name: '',
          age: '',
          address: ''
        }, {
          name: '',
          age: '',
          address: ''
        }],
      },
      rules: {
        name: [
          { required: true, message: '请选择姓名', trigger: 'blur' }
        ],
        age: [
          { required: true, message: '请选择年龄', trigger: 'blur' }
        ],
        address: [
          { required: true, message: '请选择地址', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    save() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          alert('提交成功');
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    }
  }
}
</script>

<style lang="scss" scoped>
.el-button {
  margin-bottom: 20px;
}
.el-form-item {
  margin-bottom: 0px;
}
</style>

注:tabel中的每一项也是通过遍历出来的,所以要使用动态的prop
实现的效果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值