vue element table中自定义一些input的验证

官网原话

Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。

表单

el-form表单必备以下三个属性:

:model="ruleForm" 绑定的数据内容
:rules="rules" 动态绑定的rules,表单验证规则
ref="ruleForm"  绑定的对象

template模块

其实问题关键就在于如何给el-form-item动态绑定prop

               :prop="'tableData.' + scope.$index + '.字段名'"

<template>
    <div class="TestWorld">
        <el-button @click="addLine">添加行数</el-button>
        <el-button @click="save('formDom')">baocun</el-button>
        <el-form :rules="formData.rules" :model="formData"  ref="formDom" class="demo-ruleForm">
        <el-table
          :data="formData.tableData"
          style="width: 100%">
          <el-table-column prop="bookname" label="书名">
             <template slot-scope="scope">
                <el-form-item :prop="'tableData.' + scope.$index + '.bookname'" :rules='formData.rules.name'>
                  <el-input v-model="scope.row.bookname" placeholder="书名" ></el-input>
                </el-form-item>
             </template>
          </el-table-column>
          <el-table-column prop="bookvolume" label="册数">
              <template slot-scope="scope">
                 <el-form-item :prop="'tableData.' + scope.$index + '.bookvolume'" :rules="formData.rules.volume1">
                    <el-input v-model.number="scope.row.bookvolume" placeholder="册数"></el-input>
                 </el-form-item>
              </template>
          </el-table-column>
          <el-table-column prop="bookbuyer" label="购买者">
              <template slot-scope="scope">
                 <el-form-item :prop="'tableData.' + scope.$index + '.bookbuyer'" :rules='formData.rules.name'>
                    <el-input v-model="scope.row.bookbuyer" placeholder="购买者"></el-input>
                 </el-form-item>
              </template>
          </el-table-column>
          <el-table-column prop="bookborrower" label="借阅者">
             <template slot-scope="scope">
               <el-form-item :prop="'tableData.' + scope.$index + '.bookborrower'" :rules='formData.rules.name'>
                   <el-input v-model="scope.row.bookborrower" placeholder="借阅者"></el-input>
               </el-form-item>
             </template>
          </el-table-column>
          <el-table-column prop="bookbuytime" label="购买日期">
             <template slot-scope="scope">
               <el-form-item :prop="'tableData.' + scope.$index + '.bookbuytime'" :rules='formData.rules.data1'>
                 <el-date-picker
                   v-model="scope.row.bookbuytime"
                   type="date"
                   placeholder="购买日期">
                 </el-date-picker>
               </el-form-item>
             </template>
          </el-table-column>
          <el-table-column  label="操作">
             <template slot-scope="scope">
               <el-button
                  size="mini"
                  type="danger"
                  v-if="!scope.row.editing"
                  icon="el-icon-delete"
                  @click="handleDelete(scope.$index, scope.row)">删除
               </el-button>
             </template>
          </el-table-column>
        </el-table>
       </el-form>
    </div>
</template>
      

vuejs 代码

export default {
    name:'TestWorld',
    data() {
        return {
             formData:{
                  rules:{
                    name:{ 
                            type:"string",
                            required:true,
                            message:"必填字段",
                            trigger:"blur"
                          },
                    volume1:{ 
                                type:"number",
                                required:true,
                                message:"册数必须为数字值",
                                trigger:"change"
                            },
                    data1:{ 
                            type:"date",
                            required:true,
                            message:"请选择日期",
                            trigger:"change"
                           }
                   },
                  tableData:[{
                    bookname: '',
                    bookbuytime: '',
                    bookbuyer: '',
                    bookborrower: '',
                    bookvolume:''
                  }]
              }
        }
    },
    methods:{
        addLine(){ //添加行数
            var newValue = {
                  bookname: '',
                  bookbuytime: '',
                  bookbuyer: '',
                  bookborrower: '',
                  bookvolume:''
              };
            //添加新的行数
            this.formData.tableData.push(newValue);
        },
        handleDelete(index){ //删除行数
            this.formData.tableData.splice(index, 1)
        },
        save(formName){  //保存
            this.$refs[formName].validate((valid,model) => {
                console.log(valid)
                console.log(JSON.stringify(model))
            if (valid) {
              alert('submit!');
            } else {
              console.log('error submit!!');
              return false;
            }
    
          });
        }
    }

}

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值