最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

vue中Element表单验证的使用方法

来源:动视网 责编:小采 时间:2020-11-27 19:33:43
文档

vue中Element表单验证的使用方法

vue中Element表单验证的使用方法:这篇文章主要介绍了关于vue中Element表单验证的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下Element表单验证(2)上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇。上篇讲到asy
推荐度:
导读vue中Element表单验证的使用方法:这篇文章主要介绍了关于vue中Element表单验证的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下Element表单验证(2)上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇。上篇讲到asy


这篇文章主要介绍了关于vue中Element表单验证的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

Element表单验证(2)

上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇。

上篇讲到async-validator由3大部分组成

  • Options

  • Validate

  • Rules

  • 基本验证流程如下

  • 先按照rule的规则,制定每个字段的规范,生成rules

  • 根据rules生成验证器const validator = new Validator(rules)

  • 验证器有验证函数validator.validate(source, callback)

  • source中的字段对应规则中的字段,全都通过或出错后调用callback

  • 上面中的validator.validate对应Element中的this.$refs[refName].validate,只不过被改装过的。而且在Element中定义<el-form :model='form'>:model='form',那个form就是sourcesource的字段名,如source.name就是form.name,那么只要在<el-form-item prop='name'>设置和source一样的字段名name,就可以匹配<el-form :rules='rules'>中的rules.name

    很重要的一点,rules.字段名要和source.字段名要一样才会验证。

    <template>
     <el-form :model='form' ref='domForm' :rules='rules'>
     <el-form-item prop='name' lable='名字'>
     <el-input v-model='form.name'>
     </el-form-item>
     </el-form>
    </template>
    export default {
     data() {
     this.rules = {
     name: { type: 'string', required: true, trigger: 'blur' }
     }
    
     return {
     form: {
     name: ''
     }
     }
     },
     methods: {
     submit() {
     this.$refs.domForm.validate(valid => {
     if (!valid) {
     // 验证不通过
     }
    
     // 验证通过后的处理...
     })
     }
     }
    }

    上面中validate(callback)函数已经添加到form元素DOM节点上的属性中。然后上面还有一个不好的一点。那就是规则的定义方式不够灵活。

    比如我有两个字段firstNamelastNamefirstName是必填的,而lastName是非必填的;且firstName长度要求大于1小于4而lastName要求大于1小于6。那么就要写两个不同的规则,现在只是2个字段而已,没什么,如果有很多个不同要求的字段,那要写很多个不同的规则,也要写很多个规则?岂不是很烦?能不能复用?

    Rules三种定义方式

  • 函数的方式:{ name(rule, value, callback, source, options) {} }

  • 对象的方式: { name: { type: 'string', required: true } }

  • 数组的方式: { name: [{ type: 'string' }, { required: true }] }

  • 函数的方式很强大,如果需要用到options可以函数的方式,最常用的是对象和数组的方式。现在推荐几种复用的方法。

    简单的封装一些常用的规则

    // 返回一个规则数组,必填且字符串长度在2~10之间
    export const name = (msg, min = 2, max = 10, required = true) => ([
     { required, message: msg, trigger: 'blur' },
     { min, max, message: `长度在${min}~${max}个字符`, trigger: 'blur' }
    ])
    
    // 邮箱
    export const email = (required = true) => ([
     { required, message: '请输入邮箱', trigger: 'blur' },
     { type: 'email', message: '邮箱格式不对', trigger: 'blur' }
    ])
    
    /* 自定义验证规则 */
    
    // 大于等于某个整数
    const biggerAndNum = num => (rule, v, cb) => {
     const isInt = /^[0-9]+$/.test(v)
     if (!isInt) {
     return cb(new Error('要求为正整数'))
     }
    
     if (v < num) {
     return cb(new Error(`要求大于等于${num}`))
     }
     return cb()
    }
    
    export const biggerInt = (int, required = true) => ([
     { required, message: '必填', trigger: 'blur' },
     { validator: biggerAndNum(int), trigger: 'blur' }
    ])

    封装一个专门创建规则的类,链式调用

    export default class CreateRules {
     constructor() {
     super()
     this.rules = []
     }
    
     need(msg = '必填', trigger = 'blur') {
     this.rules.push({
     required: true,
     message: msg,
     trigger
     })
     return this
     }
     
     url(message = '不是合法的链接', trigger = 'blur') {
     this.rules.push({
     type: 'url',
     trigger,
     message
     })
     return this
     }
    
     get() {
     const res = this.rules
     this.rules = []
     return res
     }
    }
    
    const createRules = new CreateRules()
    
    //规则
    const needUrl = createRules.need().url().get()
    const isUrl = createRules.url().get()
    
    // imgUrl必填且是链接;href可选不填,如果填写必须是链接
    const rules = {
     imgUrl: needUrl,
     href: isUrl
    }
    
    // deep rule 定义
    // urls是数组,长度大于1
    // urls的元素是链接
    const urls = ['http://www.baidu.com', 'http://www.baidu.com']
    
    const rules = {
     urls: {
     type: 'array',
     min: 1,
     defaultField: isUrl
     }
    }

    文档

    vue中Element表单验证的使用方法

    vue中Element表单验证的使用方法:这篇文章主要介绍了关于vue中Element表单验证的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下Element表单验证(2)上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇。上篇讲到asy
    推荐度:
    标签: 验证 VUE 里面的
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top