赞
踩
近日在公司使用ElementUI开发表单,遇到验证问题我在这里记录下。
需求:能手动添加规则,并且表单金额之间是需要相互限制的,规则最多添加3条。多余的话就不说了下述代码能够直接使用。
添加规则并进行表单验证效果图:
<template> <div class="content-validate"> <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px"> <div v-for="(item,index) in ruleForm.rules" :key="index"> <el-form-item label="預算金额" :prop="'rules[' + index + '].budget'"> <el-input type="text" v-model="item.budget" clearable class="inputWidth"></el-input> </el-form-item> <el-form-item label="分配区间" required> <el-form-item :prop="'rules[' + index + '].min'" style="display:inline-block;"> <el-input type="text" v-model="item.min" clearable class="inputWidth"></el-input> </el-form-item> <span>至</span> <el-form-item :prop="'rules[' + index + '].max'" style="display:inline-block;"> <el-input type="text" v-model="item.max" clearable class="inputWidth"></el-input> </el-form-item> </el-form-item> </div> <el-form-item> <el-button type="success" @click="addRule(1)" size="small">添加规则</el-button> <el-button type="danger" @click="addRule(0)" size="small">删除规则</el-button> <el-button type="primary" @click="submitForm" size="small">提交活动</el-button> </el-form-item> </el-form> </div> </template> <script> export default { data () { return { // 表单的真实数据 ruleForm: { rules: [ { budget: '', min: '', max: '' } ] }, // 模板数据用于初始化 BasesRuleForm: { rules: [ { budget: '', min: '', max: '' } ] }, rules: { 'rules[0].max': [ { validator: (rule, value, callback) => { if (value === '') { callback(new Error('请输入最大金额')) } else if (value > Number(this.ruleForm.rules[0].budget)) { callback(new Error('不得超出预算金额!')) } else if (value < Number(this.ruleForm.rules[0].min)) { callback(new Error('不得小于最小金额!')) } else { callback() } }, trigger: 'blur', required: true } ], 'rules[1].max': [ { validator: (rule, value, callback) => { if (value === '') { callback(new Error('请输入最大金额')) } else if (value > Number(this.ruleForm.rules[1].budget)) { callback(new Error('不得超出预算金额!')) } else if (value < Number(this.ruleForm.rules[1].min)) { callback(new Error('不得小于最小金额!')) } else { callback() } }, trigger: 'blur', required: true } ], 'rules[2].max': [ { validator: (rule, value, callback) => { if (value === '') { callback(new Error('请输入最大金额')) } else if (value > Number(this.ruleForm.rules[2].budget)) { callback(new Error('不得超出预算金额!')) } else if (value < Number(this.ruleForm.rules[2].min)) { callback(new Error('不得小于最小金额!')) } else { callback() } }, trigger: 'blur', required: true } ] } } }, created () { this._initRules() }, methods: { // 添加新的规格 addRule (type) { if (type) { if (this.ruleForm.rules.length < 3) { this.ruleForm.rules.push( JSON.parse(JSON.stringify(this.BasesRuleForm.rules[0])) ) } else { this.$message({ type: 'warning', message: '最多只能添加3条规则' }) } } else { if (this.ruleForm.rules.length > 1) { this.ruleForm.rules.pop() } } }, // 验证表单 submitForm () { this.$refs.ruleForm.validate((validate) => { if (validate) { this.$message({ type: 'success', message: this.ruleForm.rules }) } }) }, // 动态循环添加验证规则 _initRules () { for (let index = 0; index < 3; index++) { let budget = 'rules[' + index + '].budget' this.rules[budget] = [ { trigger: 'blur', required: true, message: '请输入预算金额' } ] let min = 'rules[' + index + '].min' this.rules[min] = [ { trigger: 'blur', required: true, message: '请输入最小金额' } ] } } } } </script> <style> .content-validate{ display: flex; flex-direction: column; justify-content: center; align-items: center; } .inputWidth { width: 150px; } </style>
在上面的代码中存在对max 验证代码重复度很大,可是又不能使用for循环添加,如果哪位大佬有更好的方法,希望能给我指点指点。
以上就是我对Element表达验证的理解,如果文章由于我学识浅薄,导致您发现有严重谬误的地方,请一定在评论中指出,我会在第一时间修正我的文章,以避免误人子弟。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。