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检测Firefox浏览器是否启用了Firebug的代码
Dec 28 Javascript
jquery 使用点滴函数代码
May 20 Javascript
使用jquery实现以post打开新窗口
Mar 19 Javascript
浅谈javascript中自定义模版
Jan 29 Javascript
js正则匹配出所有图片及图片地址src的方法
Jun 08 Javascript
easyui validatebox验证
Apr 29 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
php 修改密码实现代码
May 24 Javascript
vuex 项目结构目录及一些简单配置介绍
Apr 08 Javascript
vue debug 二种方法
Sep 16 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
May 01 Javascript
基于javascript的无缝滚动动画实现2
Aug 07 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
消息持续发送的完整例子
2006/10/09 PHP
解析php中curl_multi的应用
2013/07/17 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
用实例解释Python中的继承和多态的概念
2015/04/27 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
python读文件的步骤
2019/10/08 Python
学习Python列表的基础知识汇总
2020/03/10 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
职专应届生求职信
2013/11/16 职场文书
2014年会演讲稿范文
2014/01/06 职场文书
业务内勤岗位职责
2015/04/13 职场文书
公司食堂管理制度
2015/08/05 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
Python一些基本的图像操作和处理总结
2021/06/23 Python