定制化开发vue表单验证rules以及validator验证器的使用

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

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>

自定义校验规则

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

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

还是和之前一样,设置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>

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发