[前端] vue表单验证rules及validator验证器的使用方法实例

2496 0
王子 2022-10-21 15:12:18 | 显示全部楼层 |阅读模式
目录

    前言表单验证rules自定义校验规则总结


前言

为防止用户犯错,尽可能更早地发现并纠正错误。
Element中Form (表单)组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。
注意:prop对应表单域 model 字段,使用 validate方法时,该属性是必填的。

表单验证rules

以官网给出的例子分析来看
将prop 属性设置为需校验的字段名。


在data里配置要校验字段和校验规则:
required:true表示为必须输入;
message:""设置不符合校验规则时的提示信息;
trigger:""设置校验的触发方式:
        ‘change’:数据改变时触发;
        ‘blur’:失去焦点时触发;
        没有进行任何输入时,不会触发change,但一定会触发blur事件。


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


该示例完整代码:
  1. <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  2.   <el-form-item label="活动名称" prop="name">
  3.     <el-input v-model="ruleForm.name"></el-input>
  4.   </el-form-item>
  5.   <el-form-item label="活动区域" prop="region">
  6.     <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
  7.       <el-option label="区域一" value="shanghai"></el-option>
  8.       <el-option label="区域二" value="beijing"></el-option>
  9.     </el-select>
  10.   </el-form-item>
  11.   <el-form-item label="活动时间" required>
  12.     <el-col :span="11">
  13.       <el-form-item prop="date1">
  14.         <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker>
  15.       </el-form-item>
  16.     </el-col>
  17.     <el-col class="line" :span="2">-</el-col>
  18.     <el-col :span="11">
  19.       <el-form-item prop="date2">
  20.         <el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker>
  21.       </el-form-item>
  22.     </el-col>
  23.   </el-form-item>
  24.   <el-form-item label="即时配送" prop="delivery">
  25.     <el-switch v-model="ruleForm.delivery"></el-switch>
  26.   </el-form-item>
  27.   <el-form-item label="活动性质" prop="type">
  28.     <el-checkbox-group v-model="ruleForm.type">
  29.       <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
  30.       <el-checkbox label="地推活动" name="type"></el-checkbox>
  31.       <el-checkbox label="线下主题活动" name="type"></el-checkbox>
  32.       <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
  33.     </el-checkbox-group>
  34.   </el-form-item>
  35.   <el-form-item label="特殊资源" prop="resource">
  36.     <el-radio-group v-model="ruleForm.resource">
  37.       <el-radio label="线上品牌商赞助"></el-radio>
  38.       <el-radio label="线下场地免费"></el-radio>
  39.     </el-radio-group>
  40.   </el-form-item>
  41.   <el-form-item label="活动形式" prop="desc">
  42.     <el-input type="textarea" v-model="ruleForm.desc"></el-input>
  43.   </el-form-item>
  44.   <el-form-item>
  45.     <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
  46.     <el-button @click="resetForm('ruleForm')">重置</el-button>
  47.   </el-form-item>
  48. </el-form>
  49. <script>
  50.   export default {
  51.     data() {
  52.       return {
  53.         ruleForm: {
  54.           name: '',
  55.           region: '',
  56.           date1: '',
  57.           date2: '',
  58.           delivery: false,
  59.           type: [],
  60.           resource: '',
  61.           desc: ''
  62.         },
  63.         rules: {
  64.           name: [
  65.             { required: true, message: '请输入活动名称', trigger: 'blur' },
  66.             { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
  67.           ],
  68.           region: [
  69.             { required: true, message: '请选择活动区域', trigger: 'change' }
  70.           ],
  71.           date1: [
  72.             { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
  73.           ],
  74.           date2: [
  75.             { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
  76.           ],
  77.           type: [
  78.             { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
  79.           ],
  80.           resource: [
  81.             { required: true, message: '请选择活动资源', trigger: 'change' }
  82.           ],
  83.           desc: [
  84.             { required: true, message: '请填写活动形式', trigger: 'blur' }
  85.           ]
  86.         }
  87.       };
  88.     },
  89.     methods: {
  90.       submitForm(formName) {
  91.         this.$refs[formName].validate((valid) => {
  92.           if (valid) {
  93.             alert('submit!');
  94.           } else {
  95.             console.log('error submit!!');
  96.             return false;
  97.           }
  98.         });
  99.       },
  100.       resetForm(formName) {
  101.         this.$refs[formName].resetFields();
  102.       }
  103.     }
  104.   }
  105. </script>
复制代码
自定义校验规则

除此之外,我们还可以使用validator验证器来自定义校验规则,
举一个使用自定义验证规则来完成密码的二次验证的例子。


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


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


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



完整代码如下:
  1. <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  2.   <el-form-item label="密码" prop="pass">
  3.     <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>
  4.   </el-form-item>
  5.   <el-form-item label="确认密码" prop="checkPass">
  6.     <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off"></el-input>
  7.   </el-form-item>
  8.   <el-form-item label="年龄" prop="age">
  9.     <el-input v-model.number="ruleForm.age"></el-input>
  10.   </el-form-item>
  11.   <el-form-item>
  12.     <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
  13.     <el-button @click="resetForm('ruleForm')">重置</el-button>
  14.   </el-form-item>
  15. </el-form>
  16. <script>
  17.   export default {
  18.     data() {
  19.       var checkAge = (rule, value, callback) => {
  20.         if (!value) {
  21.           return callback(new Error('年龄不能为空'));
  22.         }
  23.         setTimeout(() => {
  24.           if (!Number.isInteger(value)) {
  25.             callback(new Error('请输入数字值'));
  26.           } else {
  27.             if (value < 18) {
  28.               callback(new Error('必须年满18岁'));
  29.             } else {
  30.               callback();
  31.             }
  32.           }
  33.         }, 1000);
  34.       };
  35.       var validatePass = (rule, value, callback) => {
  36.         if (value === '') {
  37.           callback(new Error('请输入密码'));
  38.         } else {
  39.           if (this.ruleForm.checkPass !== '') {
  40.             this.$refs.ruleForm.validateField('checkPass');
  41.           }
  42.           callback();
  43.         }
  44.       };
  45.       var validatePass2 = (rule, value, callback) => {
  46.         if (value === '') {
  47.           callback(new Error('请再次输入密码'));
  48.         } else if (value !== this.ruleForm.pass) {
  49.           callback(new Error('两次输入密码不一致!'));
  50.         } else {
  51.           callback();
  52.         }
  53.       };
  54.       return {
  55.         ruleForm: {
  56.           pass: '',
  57.           checkPass: '',
  58.           age: ''
  59.         },
  60.         rules: {
  61.           pass: [
  62.             { validator: validatePass, trigger: 'blur' }
  63.           ],
  64.           checkPass: [
  65.             { validator: validatePass2, trigger: 'blur' }
  66.           ],
  67.           age: [
  68.             { validator: checkAge, trigger: 'blur' }
  69.           ]
  70.         }
  71.       };
  72.     },
  73.     methods: {
  74.       submitForm(formName) {
  75.         this.$refs[formName].validate((valid) => {
  76.           if (valid) {
  77.             alert('submit!');
  78.           } else {
  79.             console.log('error submit!!');
  80.             return false;
  81.           }
  82.         });
  83.       },
  84.       resetForm(formName) {
  85.         this.$refs[formName].resetFields();
  86.       }
  87.     }
  88.   }
  89. </script>
复制代码
总结

到此这篇关于vue表单验证rules及validator验证器使用的文章就介绍到这了,更多相关vue表单验证器使用内容请搜索中国红客联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持中国红客联盟!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行