javaScript

js - 表单元编程 简化你的校验 释放检验数据的麻烦

2018-10-16  本文已影响16人  反者道之动001

在不同的框架里面我们可能会用不同的插件, 或者自己写一套。

以vue为例子,

不管是element-ui自带的校验, 还是专门做校验的vee-validate, 都太过于繁琐了, 而且还不好自定义。

比如我只想要提交的时候, 校验下这些信息, 劳资为啥要去配置一大堆东西, 视图层一个, 逻辑层一个, 配置层一个。

先看下element-ui

耦合度高, 代码量也多。
这个还算好,都是自带的校验方式,如果是自定义的呢。

再看这个, 是不是想死。

我只要校验两个东西而已, 写这么多东西。

上面的代码理想中应该是这样:

···
校验是否输入密码
校验是否再次输入密码
···

对就是写主代码的时候, 就应该是两行解决的。

但是这是理想, 怎么实现呢。

我这样写

let checkArr = [
  ['pw', '请输入密码',],
  ['checkpws', 'pws', '两次输入的密码不一致'],
]
if(!Config.funcChecks(data, checkArr)())
  return
// 下一步操作了

OK, 解决了。

两个值的时候,第一个key属性, 第二个提示语
三个的时候, 第一个是校验函数, 第二个是key属性, 第三个是提示语

这里可能会问, 两次密码校验是怎么做到的, 你只有一个值。

比如上面的代码data可以这样写

let data = {
  pws: 密码1 + 分隔符 + 密码2
}

校验函数这样可以写

checkpws(str){
  return str.split(分隔符)[0] === str.split(分隔符)[1]
}

看下实际运用的代码:


funcChecks代码如下

funcChecks(data, arr){
        let jss = `() => {
            ${arr.map(e => {
                if(e.length == 2){
                    return `
                        if(!data['${e[0]}']){
                            Config.totast('${e[1]}')
                            return
                        }
                    `
                }
                if(e.length == 3){
                    return `
                        if(!${e[0]}(data['${e[1]}'])){
                            Config.totast('${e[2]}')
                            return
                        }
                    `
                }
            }).join('')}
            return true
        }`
        // console.log('jss')
        // console.log(jss)
        return eval(jss)
    }

看到这里大家可能会说, 你用eval是作弊, 性能不好, 不安全等等, 大家可以去看wind.js作者怎么说的。

然后最后是实时校验的问题, 这个的话, 可以二次封装到不同框架里面, 如果大家有需要, 我可以出一种框架的例子。

再见。

告辞

--END--

上一篇下一篇

猜你喜欢

热点阅读