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 相关文章推荐
function foo的原型与prototype属性解惑
Nov 19 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
Feb 11 Javascript
javascript模拟实现ajax加载框实例
Oct 15 Javascript
JavaScript获取网页表单提交方式的方法
Apr 02 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
Apr 06 Javascript
js淡入淡出的图片轮播效果代码分享
Aug 24 Javascript
JavaScript获取当前url根目录(路径)
Jun 17 Javascript
详解AngularJs中$resource和restfu服务端数据交互
Sep 21 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
vue中tab选项卡的实现思路
Nov 25 Javascript
简单了解vue中的v-if和v-show的区别
Oct 08 Javascript
微信小程序实现时间进度条功能
Nov 17 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中将数组转成XML格式的实现代码
2011/08/08 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
扒一扒JavaScript 预解释
2015/01/28 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python实现的简单窗口倒计时界面实例
2015/05/05 Python
python中PIL安装简单教程
2016/04/21 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
Python爬虫中urllib库的进阶学习
2018/01/05 Python
python操作oracle的完整教程分享
2018/01/30 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
python中栈的原理及实现方法示例
2019/11/27 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
决心书格式范文
2015/09/23 职场文书
六年级数学教学反思
2016/02/16 职场文书
python urllib库的使用详解
2021/04/13 Python
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python