资讯专栏INFORMATION COLUMN

解析vue表单验证rules及validator验证器的使用方法

3403771864 / 77人阅读

  很多知识都是需要提早知道,才可以规避很多错误。

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

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

  表单验证rules

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

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

1.jpg

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

  required:true表示为必须输入;

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

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

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

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

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

2.png

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

00.png


  该示例完整代码:

  <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验证器来自定义校验规则,

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

4.png

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

0.png

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

5.png

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

6.png

  完整代码如下:

  <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>

         本篇内容已结束,欢迎大家更多精彩内容。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128382.html

相关文章

  • va.js——Vue 表单验证插件写作过程

    ...境,于是我们愉快地从JQ来到了Vue。这中间做时候,在表单验证上做不开心,看到vue插件章节,感觉自己也能写一个,因此就自己开始写了一个表单验证插件va.js。 当然为什么不找个插件呢? vue-validator呀。 我想了下,...

    suosuopuo 评论0 收藏0
  • 封装Vue组件一些技巧

    ...增加了组件之间耦合成本,但代码实现会更加简洁。 表单验证组件 通常情况下,表单验证表单提交前一个十分常见应用场景。那么,如何把表单验证功能封装在组件内部呢? 下面是一个表单组件示例,展示了通过...

    韩冰 评论0 收藏0
  • 使用vue自定义指令开发一个表单验证插件validate.js

    ...就来介绍一下如何利用vue自定义指令directive来开发一个表单验证插件过程。 1.vue插件开发 关于vue插件开发,官方文档里有很清晰说明,详情可以去阅读开发文档。我自己开发表单验证插件validate.ts和loading,messageBox插...

    warnerwu 评论0 收藏0
  • [BLANKAPP-VALIDATION]专注于Android表单验证,用方法链构建你验证规则

    ...lankapp:blankapp-validation:0.0.1-alpha@aar" } 快速集成 实例化一个验证器 final Validator validator = new Validator(); 构建你规则链并添加到验证器 // 邮箱必须输入,必须为邮箱格式 validator.add(Rule.with(mEtEmail).required().email()); // 用户名必须输入...

    oneasp 评论0 收藏0
  • Vue 进阶系列(二)之插件原理实现

    ...件原理实现 Vue 进阶系列(三)之Render函数原理实现 使用方法 插件详细使用方法详情看Vue官网 Vue官网之插件Plugins 概括出来就是 1、通过Vue.use(MyPlugin)使用,本质上是调用MyPlugin.install(Vue) 2、使用插件必须在new Vue()启动应...

    wuaiqiu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<