首页IT科技vue表单验证trigger(vue表单验证rules以及validator验证器的使用)

vue表单验证trigger(vue表单验证rules以及validator验证器的使用)

时间2025-06-20 20:42:29分类IT科技浏览4542
导读:为防止用户犯错,尽可能更早地发现并纠正错误。...

为防止用户犯错            ,尽可能更早地发现并纠正错误                。

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

注意:prop对应表单域 model 字段         ,使用 validate方法时                     ,该属性是必填的      。

表单验证rules

以官网给出的例子分析来看

将prop 属性设置为需校验的字段名            。

 在data里配置要校验字段和校验规则:

required:true表示为必须输入;

message:""设置不符合校验规则时的提示信息;

trigger:""设置校验的触发方式:

        ‘change’:数据改变时触发;

‘blur’:失去焦点时触发;

没有进行任何输入时,不会触发change,但一定会触发blur事件                    。

设置校验规则后           ,表头会出现红色*样式

该示例完整代码:

<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> <el-form-item label="活动名称" prop="name"> <el-input v-model="ruleForm.name"></el-input> </el-form-item> <el-form-item label="活动区域" prop="region"> <el-select v-model="ruleForm.region" placeholder="请选择活动区域"> <el-option label="区域一" value="shanghai"></el-option> <el-option label="区域二" value="beijing"></el-option> </el-select> </el-form-item> <el-form-item label="活动时间" required> <el-col :span="11"> <el-form-item prop="date1"> <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker> </el-form-item> </el-col> <el-col class="line" :span="2">-</el-col> <el-col :span="11"> <el-form-item prop="date2"> <el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker> </el-form-item> </el-col> </el-form-item> <el-form-item label="即时配送" prop="delivery"> <el-switch v-model="ruleForm.delivery"></el-switch> </el-form-item> <el-form-item label="活动性质" prop="type"> <el-checkbox-group v-model="ruleForm.type"> <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox> <el-checkbox label="地推活动" name="type"></el-checkbox> <el-checkbox label="线下主题活动" name="type"></el-checkbox> <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox> </el-checkbox-group> </el-form-item> <el-form-item label="特殊资源" prop="resource"> <el-radio-group v-model="ruleForm.resource"> <el-radio label="线上品牌商赞助"></el-radio> <el-radio label="线下场地免费"></el-radio> </el-radio-group> </el-form-item> <el-form-item label="活动形式" prop="desc"> <el-input type="textarea" v-model="ruleForm.desc"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleForm)">立即创建</el-button> <el-button @click="resetForm(ruleForm)">重置</el-button> </el-form-item> </el-form> <script> export default { data() { return { ruleForm: { name: , region: , date1: , date2: , delivery: false, type: [], resource: , desc: }, rules: { name: [ { required: true, message: 请输入活动名称, trigger: blur }, { min: 3, max: 5, message: 长度在 3 到 5 个字符, trigger: blur } ], region: [ { required: true, message: 请选择活动区域, trigger: change } ], date1: [ { type: date, required: true, message: 请选择日期, trigger: change } ], date2: [ { type: date, required: true, message: 请选择时间, trigger: change } ], type: [ { type: array, required: true, message: 请至少选择一个活动性质, trigger: change } ], resource: [ { required: true, message: 请选择活动资源, trigger: change } ], desc: [ { required: true, message: 请填写活动形式, trigger: blur } ] } }; }, methods: { submitForm(formName) { this.$refs[formName].validate((valid) => { if (valid) { alert(submit!); } else { console.log(error submit!!); return false; } }); }, resetForm(formName) { this.$refs[formName].resetFields(); } } } </script>

自定义校验规则

除此之外      ,我们还可以使用validator验证器来自定义校验规则                    ,

举一个使用自定义验证规则来完成密码的二次验证的例子         。

还是和之前一样               ,设置prop需校验的字段名和v-model绑定值

 但这时   ,我们需要在data中自己定义校验规则                   ,需要注意的是                   ,设置的规则与return同级        。

 在rules中配置要校验的字段和用到的规则

完整代码如下:

<el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> <el-form-item label="密码" prop="pass"> <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input> </el-form-item> <el-form-item label="确认密码" prop="checkPass"> <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off"></el-input> </el-form-item> <el-form-item label="年龄" prop="age"> <el-input v-model.number="ruleForm.age"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleForm)">提交</el-button> <el-button @click="resetForm(ruleForm)">重置</el-button> </el-form-item> </el-form> <script> export default { data() { var checkAge = (rule, value, callback) => { if (!value) { return callback(new Error(年龄不能为空)); } setTimeout(() => { if (!Number.isInteger(value)) { callback(new Error(请输入数字值)); } else { if (value < 18) { callback(new Error(必须年满18岁)); } else { callback(); } } }, 1000); }; var validatePass = (rule, value, callback) => { if (value === ) { callback(new Error(请输入密码)); } else { if (this.ruleForm.checkPass !== ) { this.$refs.ruleForm.validateField(checkPass); } callback(); } }; var validatePass2 = (rule, value, callback) => { if (value === ) { callback(new Error(请再次输入密码)); } else if (value !== this.ruleForm.pass) { callback(new Error(两次输入密码不一致!)); } else { callback(); } }; return { ruleForm: { pass: , checkPass: , age: }, rules: { pass: [ { validator: validatePass, trigger: blur } ], checkPass: [ { validator: validatePass2, trigger: blur } ], age: [ { validator: checkAge, trigger: blur } ] } }; }, methods: { submitForm(formName) { this.$refs[formName].validate((valid) => { if (valid) { alert(submit!); } else { console.log(error submit!!); return false; } }); }, resetForm(formName) { this.$refs[formName].resetFields(); } } } </script>

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
企业SEO优化营销(掌握SEO优化技巧,提升企业网站流量)