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 多级checkbox选择效果
Aug 20 Javascript
javascript 函数使用说明
Apr 07 Javascript
读jQuery之十二 删除事件核心方法
Jul 31 Javascript
JS修改css样式style浅谈
May 06 Javascript
深入解析contentWindow, contentDocument
Jul 04 Javascript
jQuery客户端分页实例代码
Nov 18 Javascript
TypeScript 学习笔记之基本类型
Jun 19 Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 Javascript
Js面试算法详解
Apr 08 Javascript
Webpack path与publicPath的区别详解
May 03 Javascript
vue 实现axios拦截、页面跳转和token 验证
Jul 17 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
Sep 20 jQuery
理解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/08/27 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
分享一个php 的异常处理程序
2014/06/22 PHP
PHP使用函数用法详解
2018/09/30 PHP
页面使用密码保护代码
2013/04/10 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
10款最好的Web开发的 Python 框架
2015/03/18 Python
python使用7z解压apk包的方法
2015/04/18 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
python集合的新增元素方法整理
2020/12/07 Python
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
数控技术与应用毕业生自荐信
2013/09/24 职场文书
初中生三年学习生活的自我评价
2013/11/03 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
单位婚育证明范本
2014/11/21 职场文书
文明礼仪主题班会
2015/08/13 职场文书
React如何创建组件
2021/06/27 Javascript
django中websocket的具体使用
2022/01/22 Python
python缺失值填充方法示例代码
2022/12/24 Python