这篇文章时关于如何使用iview的form表单校验。主要学习如何使用form校验(以校验文字长度为例),以及如何动态添加校验规则和异步校验。

1.为需要校验的表单添加form标签

  1. <!--注意: ref/rules/model/prop等属性是必须的-->
  2. <Form res="foemRef" :rules="formRules" :model="formData" v-if="liveNode">
  3. <Row>
  4. <!--正常校验-->
  5. <Col>
  6. <FormItem prop="name">
  7. <Input v-model="formData.name"></Input>
  8. </FormItem>
  9. </Col>
  10. <!--动态校验-->
  11. <Col v-if="flag">
  12. <FormItem prop="age">
  13. <Input v-model="formData.age"></Input>
  14. </FormItem>
  15. </Col>
  16. <!--异步校验-->
  17. <Col>
  18. <FormItem prop="asyName">
  19. <Input v-model="formData.asyName"></Input>
  20. </FormItem>
  21. </Col>
  22. </Row>
  23. </Form>

2.添加校验规则

  1. formRules: {
  2. name: [
  3. {required: true, message: "必输项不能为空", trigger: 'blur'},
  4. {validator:(rule, value, cb)=>{lenValid(value, 30, cb)}, trigger: 'blur'}
  5. ],
  6. age:[], // 注意因为age是根据条件判断是否必输,先留个坑
  7. asyName: [ // 异步校验,使用change触发,即使不改变输入数据也会在提交数据的时候自动校验一次
  8. {validator:(rule, value, cb)=>{asyValid(value, cb)}, trigger: 'change'}
  9. ]
  10. }

3.校验方法

  1. // 校验输入的字符长度
  2. function lenValid(str, num, cb){
  3. if(str){
  4. let len = getLen(str)
  5. if(len > num){
  6. return cb(new Error('Too Long...'))
  7. }
  8. }
  9. cb()
  10. }
  11. // 获取字符长度
  12. function getLen(str){
  13. let len = 0
  14. if(str){
  15. str = str + '' // to string
  16. for(let i=0; i<str.length; i++){
  17. let c = str.charCodeAt(i)
  18. if((c >= 0x0001 && c <= 0x007e) || (0xff60 < = c && c <= 0xff9f)){
  19. len++ // 单字节
  20. }else{
  21. len += 3 // 汉字
  22. }
  23. }
  24. }
  25. return len
  26. }

4.动态添加校验规则

有时候需要动态切换一个输入框,比如:上面的age字段,显示的时候是必输项,隐藏的时候是非必输的,这个时候需要动态的修改校验规则

  1. this.liveNode = flase // 先抹去Form,等校验规则修改后在重新渲染
  2. if(this.flag){
  3. this.formRules.age.unShift({required: true, message: '必输项'})
  4. }else{
  5. if(this.formRules.age.length > 0){
  6. this.formRules.age.shift()
  7. }
  8. }
  9. this.liveNode = true // 重新渲染Form

5.异步校验

有时候输入的内容需要到后台异步校验

  1. // 异步校验 - 成败都要有回调函数,校验失败抛出异常
  2. function asyValid(value, cb){
  3. let param = {asyName: value} // 将需要校验的值作为参数
  4. $http(url,action,param,(res)=>{
  5. cb()
  6. },(err)=>{
  7. cb(new Error(err.data.message))
  8. })
  9. }

vue+iview的form表单校验总结的更多相关文章

  1. 应用二:Vue之ElementUI Form表单校验

    (注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的)   表单校验是前端开发过程中最常用到的功能之一,根据个人的工作经验总结在此对表单校验功能的基 ...

  2. iview form表单数值类型校验「iview自定义form表单校验器」

    摘录iview表单验证 Form 组件基于 sync-validator 实现的数据验证,给 Form 设置属性 rules,同时给需要验证的 FormItem 设置属性 prop 指向对应字段即可. ...

  3. vue自定义轻量级form表单校验

    遇到了form表单提交的需求,找了vue的组件觉得不够灵活,有时间自己写了一个. 调用方法 全局引入注册: import va from 'global/js/va' va.install(Vue); ...

  4. React-Antd4的Form表单校验

    之前很少用react做项目,最近入职新公司,用的react,在自己的摸索过程中,慢慢会记录一些使用方法.今天简单记录一下使用antd 4.0版本的Form表单校验,直接代码. 需要购买阿里云产品和服务 ...

  5. element-ui Form表单校验

    使用element-ui自带的表单校验,注意几个点: 1.el-form通过rules属性,绑定校验规则 2.el-form-item的prop属性,设置为需要校验的字段名 3.提交后二次校验 sav ...

  6. 封装Vue Element的form表单组件

    前两天封装了一个基于vue和Element的table表格组件,阅读的人还是很多的,看来大家都是很认同组件化.高复用这种开发模式的,毕竟开发效率高,代码优雅,逼格高嘛.虽然这两天我的心情很糟糕,就像& ...

  7. vue elementUI之Form表单 验证

    首先说一下 我在form表单里面遇见的坑: 1.例如我要给后台传的不是对象,而是一个数组,怎么写验证? 2.比如我有四个弹出框,都要做验证,这个时候就要注意了,每一个弹出框的ref都不能给的一样,并且 ...

  8. 使用Vue动态生成form表单

    form-create 表单生成器 具有数据收集.校验和提交功能的表单生成器,支持双向数据绑定和事件扩展,组件包含有复选框.单选框.输入框.下拉选择框等表单元素以及省市区三级联动,时间选择,日期选择, ...

  9. react + antd Form表单校验

    非空限制 {getFieldDecorator('name', { rules: [{ required: true, message: '名称不能为空', }],})( <Input plac ...

随机推荐

  1. flutter Tooltip轻量级操作提示

    Tooltip是继承于StatefulWidget的一个Widget,它并不需要调出方法,当用户长按被Tooltip包裹的Widget时,会自动弹出相应的操作提示. import 'package:f ...

  2. Typescript中的可索引接口 类类型接口

    /* 5.typeScript中的接口 可索引接口 类类型接口 */ /* 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用 ...

  3. 如何:创建返回 UI 的外接程序

    https://msdn.microsoft.com/zh-cn/library/bb909849(v=vs.100).aspx

  4. Qt编写气体安全管理系统4-通信协议

    一.前言 通信协议解析是整个系统的核心灵魂,绝大部分人做软硬件通信开发,第一步估计就是写demo将协议解析好,然后再慢慢写整个界面和操作流程等,在工业控制领域,modbus协议应用还是非常广泛的,这个 ...

  5. KSQL Syntax Reference

    KSQL Syntax Reference KSQL has similar semantics to SQL: Terminate KSQL statements with a semicolon ...

  6. Spring Boot与MyBatis的集成

    SSM(Spring+Spring MVC+MyBatis)是当前主流的框架组合开发方式之一,普遍被应用于互联网项目中.如果要使用Spring Boot开发一个基于SSM框架的应用,那么我们要怎么做呢 ...

  7. 【JS新手教程】JS获取当前星期几的几种方法

    该文通过获取星期几的几种方法,介绍JS里的数组,判断,和字符串截取,可以当作新手教程看,小白也看的懂.获取星期几,可通过Date()对象的getDay()获取,获取的是一个数字,对应的是0,1,2,3 ...

  8. didSelectRowAtIndexPath方法无响应解决办法

    tableview的代理事件didSelectRowAtIndexPath失效,可能有三个原因: 1.没有设置tableview的Delegate  需要设置tableview的代理才可以响应代理事件 ...

  9. KVM虚拟机两种配置的概念不同之处

    KVM虚拟机配置的两种方式之间的不同之处 NAT方式 NAT模式中,让虚拟机借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网. NAT模式中,虚拟机的网卡和物理网卡的网络,不在同一个网 ...

  10. PHP提高in_array查找元素的方法

    PHP提高in_array查找元素的方法<pre><?php$arr = array(); // 创建10万个元素的数组for($i=0; $i<100000; $i++){ ...