资讯专栏INFORMATION COLUMN

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

3403771864 / 1891人阅读

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

  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 表单验证插件写作过程

    摘要:一表单验证模块的构成任何表单验证模块都是由配置校验报错取值这几部分构成的。其实我是想写个指令来完成表单验证的事的。当然表单验证这种是高度定制化的。 前言 前段时间,老大搭好了Vue的开发环境,于是我们愉快地从JQ来到了Vue。这中间做的时候,在表单验证上做的不开心,看到vue的插件章节,感觉自己也能写一个,因此就自己开始写了一个表单验证插件va.js。 当然为什么不找个插件呢? vu...

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

    摘要:根据组件单向数据流和和事件通信机制,需要由子组件通过事件通知父组件,并在父组件中修改原始的数据,完成状态的更新。 本文同步在个人博客shymean.com上,欢迎关注 写Vue有很长一段时间了,除了常规的业务开发之外,也应该思考和反思一下封装组件的正确方式。以弹窗组件为例,一种实现是在需要模板中引入需要弹窗展示的组件,然后通过一个flag变量来控制弹窗的组件,在业务代码里面会充斥着冗余的弹...

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

    摘要:今天就来介绍一下如何利用的自定义指令来开发一个表单验证插件的过程。按照这种方式就能够使用自己开发的这个表单校验插件。这段时间在进行一个新项目的前期搭建,新项目框架采用vue-cli3和typescirpt搭建。因为项目比较轻量,所以基本没有使用额外的ui组件,有时候我们需要的一些基础组件我就直接自己开发了。今天就来介绍一下如何利用vue的自定义指令directive来开发一个表单验证插件的过...

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

    摘要:示例输出第一步先不考虑插件,在已有的中是没有这个公共方法的,如果要简单实现的话可以通过钩子函数来,即在里面验证逻辑。按照插件的开发流程,应该有一个公开方法,在里面使用全局的方法添加一些组件选项,方法包含一个钩子函数,在钩子函数中验证。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导)showImg(https://segmen...

    wuaiqiu 评论0 收藏0

发表评论

0条评论

3403771864

|高级讲师

TA的文章

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