当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    Vue快速实现通用表单验证的示例代码

    栏目:win服务器问题汇总 时间:2020-01-14 08:16

    本文开篇第一句话,想引用鲁迅先生《祝福》里的一句话,那便是:“我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单”。这句话要从哪里说起呢?大概要从最近半个月的“全栈工程师”说起。项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载。博主选择了前后端分离的方式,在这个过程中发现:首先,只要有依赖jQuery的组件,譬如Kendoui,即使使用了Vue,依然需要通过jQuery去操作DOM。其次,只有有通过Rozar生成的DOM,譬如HtmlHelper,Vue的双向绑定就突然变得尴尬起来,更不用说,Rozar中的@语法和Vue中的@指令相互冲突的问题,原本可以直接用v-for生成列表,因为使用了HtmlHelper,突然一下子变得厌恶起来,虽然Rozar语法非常强大,可我依然没有在JavaScript里写C#的热情,因为实在太痛苦啦Orz……

    所以,想做好前后端分离,首先需要分离出一套前端组件库,做不到这一点,前后端分离就无从谈起,就像我们公司的项目,即使框架切换到.NET Core,可是在很长的一段时间里,我们其实还是再写MVC,因为所有的组件都是后端提供的HtmlHelper/TagHelper这种形式。我这次做项目的过程中,其实是通过jQuery实现了一部分组件,正因为如此,一个在前后端不分离时非常容易实现的功能,在前后端分离以后发现缺好多东西,就比如最简单的表单验证功能,即便你是在做一个新项目,为了保证产品在外观上的一致性,你还是得依赖老项目的东西,所以,这篇博客主要想说说前后端分离以后,Vue的时代怎么去做表单的验证。因为我不想测试同事再给我提Bug,问我为什么只有来自后端接口的验证,而没有来自前端页面的验证。我希望,在写下这篇博客之前,我可以实现和老项目一模一样的表单验证。如同CRUD之于后端,80%的前端都是在写Form表单,所以,这个事情还是挺有意思的。

    最简单的表单验证

    OK,作为国内最接“地气”的前端框架,Vue的文档可以说是相当地“亲民”啦!为什么这样说呢,因为其实在官方文档中,尤大已经提供了一个表单验证的示例,这个示例让我想起给某银行做自动化工具时的情景,因为这两者都是采用MVVM的思想,所以,理解起来是非常容易的,即:通过一个列表来存储错误信息,而这个错误信息会绑定到视图层,所以,验证的过程其实就是向这个列表里添加错误信息的过程。我们一起来看这个例子:

    <div>
     <h2>你好,请登录</h2>
     <div>
      <form >
       <div>
        <label>邮箱</label>
        <input type="text" class="form-control"  placeholder="Email" v-model="email">
        </div>
       </div>
       <div>
        <label>密码</label>
        <input type="password" class="form-control"  placeholder="Password" v-model="password">
       </div>
       <div>
        <button type="button" class="btn btn-default login" v-on:click="login()">登录</button>
       </div>
       <div v-if="errorList.length > 0">
        <div class="alert alert-danger" role="alert">{{errorList.join(';')}}</div>
       </div>
      </form>
     </div>
    </div>
    <script>
    var vm = new Vue({
     el: '#loginFrom',
     data: {
      email: "",
      password: "",
      errorList: []
     },
     methods: {
      validate: function () {
       this.errorList = []
       if (this.email == '') {
        this.errorList.push('请输入邮箱');
       } else {
        var reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
        if (!reg.test(this.email)) {
         this.errorList.push('请输入有效的邮箱');
        }
       }
       if (this.password == '') {
        this.errorList.push('请输入密码');
       } else {
        if (this.password.length < 6) {
         this.errorList.push('密码长度不得少于6位');
        }
       }
    
       return this.errorList.length <= 0;
      },
      login: function () {
       if (this.validate()) {
        alert('登录成功');
       }
      }
     }
    });
    </script>
    
我有一卡车的娇无处可撒 - 抖音女生个性签名可爱又好听 有仇必报有爱必抱 - 抖音最火女生个性签名2019最新 慢慢变好才是给自己最好的礼物 - 抖音个性签名女简短励志2019 嘲讽也好掌声也好做好自己 - 微信女生个性签名奋斗励志 我不是个温柔的人可不妨碍我喜欢你呀 - 2019网红都在发的QQ个性 确认过眼神是可以尬聊的人 - 快手个性签名女生可爱幽默 女生专属抖音个性签名大全 - 抖音个性签名女生简短小清新 我这个该死的漂亮女孩 - qq扩列宣言女生可爱撩人签名 你比一大推零食还有诱惑力 - qq女生个性签名可爱好听 女生个性签名独一无二 - 女生一句话签名可爱霸气 、唐城:SVN没有update和commit 、唐城:Idea 使用SVN教程(有图) 、唐城:IDEA集成git和使用步骤(有图) 、唐城:mysql 内连接、左连接(左外连接)、右连接(右外连接) 、唐城:Spring Boot框架入门教程(快速学习版) 、唐城:构建微服务:Spring boot 入门篇 、唐城:拿来就能跑,1200多套微信小程序源码-史上最全的不同行 、唐城:老兵的经验之谈,成长路上这个道理越早知道越好 、唐城:(转发)Java开发、工作经验面试总结、[推荐阅读] 、唐城:远程debug调试,小伙伴们都很惊讶! 、唐城:清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Git 、唐城:高薪程序员也躲不过35岁这一关..当能力与年龄脱节,我们 晴天的专栏:怎样规划你毕业以后的人生 流年的博客:C++语言篇 字符串及字符数组练习 blackball1998的博客:自动封装前端参数 blackball1998的博客:转发和重定向中携带变量 blackball1998的博客:设置Session和Cookie blackball1998的博客:扩展Spring MVC blackball1998的博客:添加拦截器 blackball1998的博客:文件上传下载 blackball1998的博客:全局异常处理 blackball1998的博客:请求异步处理 zhang_sheng_nian的博客:前端传后台的时间格式(如:2019-05-01 ModelMapper从Map转实体,数据类型转换出错failed to convert ja Samuel丶Zhou的博客:“2021-01-30T16:00:00.000Z“: expected f string佳佳的博客:“2021-01-28 18:34:28”时间转化成时间戳格 Sock的博客:用C语言写一个简单的扫雷小游戏 Anton的博客:【C语言初阶】扫雷小游戏(C语言简易版) 404name的博客:【C语言】从零开始的C语言小游戏之路(总) 使用python的chardet库获得文件编码并修改编码 忘记ftp密码使用python ftplib库暴力破解密码的方法示例 python使用rsa加密算法模块模拟新浪微博登录 python检测lvs real server状态 pyqt和pyside开发图形化界面 pyside写ui界面入门示例 python3使用urllib示例取googletranslate(谷歌翻译) python使用beautifulsoup从爱奇艺网抓取视频播放 python生成指定长度的随机数密码 python写的一个文本编辑器 python实现批量转换文件编码(批转换编码示例) 怎么判断一个网站seo的好坏? 很多企业为什么都忽视网站运营甚至说放弃? php make test 报错怎么办 Springboot项目中运用vue+ElementUI+echarts前后端交互实现动态圆环图(推荐) php怎么删除对象中的元素 mac怎么修改php环境变量 Unity连接MySQL并读取表格数据的实现代码 Java正则表达式实现经纬度的合法性操作 SpringCloud Alibaba使用Seata处理分布式事务的技巧 详解php如何实现一个简单的图片边缘检测 浅谈StringEntity 和 UrlEncodedFormEntity之间的区别 你究竟是否适合网络创业 七牛云存储——与创业精神一起前行 关于JDK+Tomcat+eclipse+MyEclipse的配置方法 一文搞懂C#实现读写文本文件中的数据 JDK8中的HashMap初始化和扩容机制详解 .net core中编辑json配置文件的方法 Java中HashMap的初始容量设置方式 把自己打造一个高效率的站长 php artisan 不能用怎么办