vue+element表单验证(多重object嵌套)

本文介绍了如何在Vue+Element应用中进行双重对象嵌套的表单验证。针对async-validator库的使用,文章详细讨论了data中的数据结构,模板中的prop绑定规则,以及在提交表单时的注意事项,帮助开发者解决对象嵌套验证的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

element的表单验证用的是async-validator, 官方说明文档地址:https://github.com/yiminghe/async-validator;

element官网对表单验证只有简单的几个例子

这里记录下双层嵌套object数据的表单验证:

1. data中数据如下:

data(){
 return{
      ruleForm:{
        human:{
            name:'',
            sex:0,
        },
        dog:'',
       }
    }
    rules:{
        dog: { required: true, message: '请填写dog', trigger: 'blur' },  //type默认是string
        'human.name':[{type: "string", required: true, message: '请填写名字', trigger: 'blur'}],  //有多条校验条件的时候可以放个object数组
        'human.sex':{ type: "string",required: true, message: '请填写性别', trigger: 'blur'},
      },
}

需要注意的是: 在async-validator官网中, object嵌套的时候rules也是个嵌套的结构:

但是我试下下, 这个格式无法识别. 不知道是不是我哪里有问题.

2. template中代码:

需要注意的是prop中, human下的属性, 要加上前缀"human.", dog直接写dog, 也就是是从rulesForm下开始算起

 <el-form
        :inline="true"
        :model="ruleForm"
        label-width="110px"
        ref="ruleForm"
        :rules="rules"
        style="width:90%;margin:0 auto">
      <el-card>
            <div slot="header">
              <span>基本信息</span>
            </div>
            <div>
              <div>
                <el-form-item label="名字:"  prop="human.name">
                    <el-input v-model="ruleForm.human.name"></el-input>
                </el-form-item>
                 <el-form-item label="性别:" prop="human.sex">
                    <el-input v-model="ruleForm.human.sex"></el-input>
                </el-form-item>
               </div>
               <div>
                 <el-form-item label="dog:"  prop="dog">
                    <el-input v-model="ruleForm.dog"></el-input>
                </el-form-item>
               </div>
            </div>
       </el-card>
       <el-form-item style="margin-top:20px;float:right">
            <el-button type="primary" @click="submitForm('ruleForm')" >确定</el-button>
            <el-button >取消</el-button>
       </el-form-item>
       <div class="clear"></div>
</el-form>

3. 提交方法中:

 methods:{
    submitForm(formName) {
      var self = this;
      this.$refs[formName].validate((valid) => {
        if (valid) {   //提交前校验以下是否通过  self.$http.post(this.HOST+"/xxx",JSON.stringify(self.ruleForm.human), {headers: {"Content-Type": "application/json"}})  //我这里只提交human部分
          .then(res=>{

          }).catch(err => {
          });
        } else { //这一段是为了找到第一个校验不通过的地方, 然后focus过去
          var isError=document.getElementsByClassName("is-error");
          isError[0].querySelector('input').focus();
          return false;  
        }
      });
    },
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值