AngularJs实现ng1.3+表单验证


Posted in Javascript onDecember 10, 2015

前一篇文章详解AngularJS实现表单验证说过,ng1.3+以后对于表单验证有了优化,它不再需要一个详细的表达式状态创建元素显示或隐藏。

例如:我们在ng1.3之前的版本都需要如下写法:

<div class="error" ng-show="signup_form.name.$dirty && signup_form.name. $invalid && signup_form.submitted">

ng1.3之后新增了一个ngMessages指令,他被打包成一个模块发布,因此我们使用的时候只需要将这个依赖模块引入即可
angular.module('myApp', ['ngMessages']);

怎么用?

现在我们学习一下,它的用法,Code如下:

<!DOCTYPE html>
<html ng-app="myTest">
  <head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link href="~/Content/css/bootstrap.min.css" rel="stylesheet" />
    <script src="~/Javascript/angular.js"></script>
    <script src="~/Javascript/angular-messages.js"></script>

    <style type="text/css">
      body {
        padding-top: 30px;
      }
    </style>
  </head>
  <body>
    <div class="col-md-6">
      <form role="form" name="myForm" class="form-horizontal" novalidate>
        <div class="form-group">
          <div class="col-md-2">
            用户名
          </div>
          <div class="col-md-10">
            <input type="text" placeholder="ng-Messages测试" name="name" ng-model="username.name"
                ng-minlength=3 ng-maxlength=20 required />
            <hr/>
            $error:{{myForm.name.$error}}
            <hr/>
            <div ng-messages="myForm.name.$error">
              <div ng-message="required">必填项</div>
              <div ng-message="minlength">字符太短小于3</div>
              <div ng-message="maxlength">字符太长大于20</div>
            </div> 
          </div>
        </div>
      </form>
    </div>
  </body>
</html>
<script type="text/javascript">
   angular.module("myTest", ['ngMessages']);
</script>

效果如下:

AngularJs实现ng1.3+表单验证

可以看出,其实ng是通过$error来监视模型的变化,因为$error中包含了错误的详细信息,同时,如果我们的应用场景中如果同时,有好几处错误,那么,上面代码按照ng-message的顺序只会显示一条错误信息,如果我们需要全部显示出来只需要添加 ng-messages-multiple

<input type="text" placeholder="测试" name="name" ng-model="username.name" ng-minlength=3 ng-maxlength=20 required />
<div ng-messages="myForm.name.$error" ng-messages-multiple>
<div ng-message="required">必填项</div>
<div ng-message="email">邮件格式不对</div>
<div ng-message="minlength">字符太短小于3</div>  
<div ng-message="maxlength">字符太长大于20</div>
</div>

效果如下:

AngularJs实现ng1.3+表单验证

怎么复用?

我们的验证信息在一个项目中大多是通用性很高的(对于样式,描述等都有高度的统一性),因此我们这里也会考虑到复用,ng中同样提供了解决方案

就是将其作为模板,指定请求路径由ng自动添加。这里再介绍一个指令 ng-messages-include

我们将上面的验证信息保存到一个独立的html静态页面中,然后使用ng-messages-include指定请求路径即可。

Code:

<div ng-messages="myForm.name.$error" ng-messages-multiple
    ng-messages-include ="@Url.Content("~/Content/template/error.html")">
  </div>

error.html

<div ng-message="required">必填项</div>
<div ng-message="email">邮件格式不对</div>
<div ng-message="minlength">字符太短小于3</div>
<div ng-message="maxlength">字符太长大于20</div>

效果如下:

AngularJs实现ng1.3+表单验证

当然,模板可能在特殊的时期某些字段错误提示不能满足你的要求,你可以添加自定义的提示如下:

<div class="error" ng-messages="signup_form.name.$error" 
ng-messages-include="templates/errors.html"> 
<!-- 
  按ng-message的顺序依次覆盖
--> 
</div>

自定义验证(指令)涉及到的细节知识点很多,如果简单地为了用而用,可能写得出功能,但是代码丑陋,太菜了,还需要花个把月方能弄懂点皮毛,这部分暂告一段落,等彻底明白了,在大家分享,大家亦可以结合《理解AngularJs指令》进行学习。

Javascript 相关文章推荐
在JavaScript中遭遇级联表达式陷阱
Mar 08 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
Feb 07 Javascript
js Math 对象的方法
Sep 01 Javascript
js用Date对象的setDate()函数对日期进行加减操作
Sep 18 Javascript
javascript弹出带文字信息的提示框效果
Jul 19 Javascript
原生js实现addclass,removeclass,toggleclasss实例
Nov 24 Javascript
Bootstrop实现多级下拉菜单功能
Nov 24 Javascript
详解ES6之用let声明变量以及let loop机制
Jul 15 Javascript
JavaScript fetch接口案例解析
Aug 30 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 Javascript
koa2 从入门到精通(小结)
Jul 23 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 30 Javascript
理解AngularJs指令
Dec 10 #Javascript
详解AngularJS实现表单验证
Dec 10 #Javascript
jquery实现鼠标悬浮停止轮播特效
Aug 20 #Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 #Javascript
jquery实现定时自动轮播特效
Dec 10 #Javascript
jQuery手动点击实现图片轮播特效
Apr 20 #Javascript
javascript实现unicode与ASCII相互转换的方法
Dec 10 #Javascript
You might like
简单的PHP图片上传程序
2008/03/27 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
使用Python的内建模块collections的教程
2015/04/28 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
Python常用库大全及简要说明
2020/01/17 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
会计实习期自我鉴定
2013/10/06 职场文书
小学语文业务学习材料
2014/06/02 职场文书
支部鉴定材料
2014/06/02 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python