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窗口功能指南之在窗口中书写内容
Jul 21 Javascript
JS类中定义原型方法的两种实现的区别
Mar 08 Javascript
jquery 选择器部分整理
Oct 28 Javascript
表单序列化与jq中的serialize使用示例
Feb 21 Javascript
javascript实现根据身份证号读取相关信息
Dec 17 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
Feb 13 Javascript
SpringMVC返回json数据的三种方式
Dec 10 Javascript
原生JS实现首页进度加载动画
Sep 14 Javascript
JS碰撞运动实现方法详解
Dec 15 Javascript
解决vue v-for 遍历循环时key值报错的问题
Sep 06 Javascript
Vue动态组件与异步组件实例详解
Feb 23 Javascript
js实现鼠标滑动到某个div禁止滚动
Sep 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
微信公众平台开发之配置与请求
2015/08/26 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
9种python web 程序的部署方式小结
2014/06/30 Python
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
某公司部分笔试题
2013/11/05 面试题
编程用JAVA解析XML的方式
2013/07/07 面试题
高二地理教学反思
2014/01/24 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
入党政审材料范文
2014/12/24 职场文书
父亲节活动总结
2015/02/12 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
欠条格式范本
2015/07/03 职场文书
JS数组去重详情
2021/11/07 Javascript
Python 中的 copy()和deepcopy()
2021/11/07 Python
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android