目录

基本验证

    <form name="form" novalidate ng-app>
<span>{{form.$invalid}}</span>
<span>{{form.$valid}}</span>
<span>{{form.$dirty}}</span>
<span>{{form.$pristine}}</span>
<input type="text" ng-model="user" required />
<input type="text" ng-model="pwd" required minlength="4" ng-maxlength="5" />
<input type="text" ng-model="phone" required ng-pattern="/1[3|5|7|8|][0-9]{9}/" />
<input type="email" ng-model="email" required />
<input type="url" ng-model="url" required />
<input type="number" ng-model="number" required />
<div>
<button type="reset" ng-disabled="form.$pristine">重置</button>
<button type="submit" ng-disabled="form.$invalid">提交</button>
</div>
</form>

以上展示了基本的ng验证.

这里重点介绍一下上面的特例:

novalidate:   禁用H5自带的验证

ng-maxlength: 如果不写ng,maxlength则直接限制最多输入字符,稍微有点区别(IE9 + Chrome 测试)

ng-pattern:  通过正则验证,如果不写ng开头,无验证效果.

注:要启用验证 同时需要绑定一个ng-model

属性类   描述
$valid ng-valid Boolean 告诉我们这一项当前基于你设定的规则是否验证通过
$invalid ng-invalid Boolean 告诉我们这一项当前基于你设定的规则是否验证未通过
$pristine ng-pristine Boolean 如果表单或者输入框没有使用则为True
$dirty ng-dirty Boolean 如果表单或者输入框有使用到则为True

访问表单属性

  • 方位表单: <form name>.<angular property>

  • 访问一个输入框: <form name>.<input name>.<angular property>

验证插件

在介绍messages插件之前,我们看下本来的验证提示

    <form name="form" ng-app novalidate>
<span>{{form.user.$error.required?'user该项必填':''}}</span>
<input type="text" ng-model="user" name="user" required />
<span>{{form.pwd.$error.required?'pwd该项必填':''}}</span>
<input type="text" ng-model="pwd" name="pwd" required />
<span>{{form.info.$error.required?'info该项必填':''}}</span>
<input type="text" ng-model="info" name="info" required />
<span>{{form.age.$error.required?'age该项必填':''}}</span>
<input type="text" ng-model="age" name="age" required />
<div>
<button type="submit" ng-disabled="form.$invalid">提交</button>
</div>
</form>

这里只是判断了require 当我们的代码 我们重复写了很多3元表达式

messages插件就是更友好的解决重复的问题

    <form name="form" ng-app="myApp" novalidate>
<input type="email" ng-model="user" name="username" required minlength="4" />
<div ng-messages="form.username.$error" ng-messages-multiple>
<div ng-message="required">该项必填</div>
<div ng-message="minlength">低于最低长度</div>
<div ng-message="email">应为email</div>
</div>
</form>
<script src="Scripts/angular.min.js"></script>
<script src="Scripts/angular-messages.min.js"></script>
<script>
angular.module('myApp', ['ngMessages']);
</script>

Nuget:Install-Package AngularJS.Messages

自定义验证

通过基本的验证方式,我们已经能够解决大部分的验证问题.但项目中永远充满着各种各样的需求.

在ng中的自定义验证,一般通过指令的形式创建.

    <form name="form" ng-app="myApp" novalidate>
<input type="email" ng-model="user" name="username" required ensure-unique minlength="4" />
<div ng-messages="form.username.$error" ng-messages-multiple>
<div ng-message="required">该项必填</div>
<div ng-message="minlength">低于最低长度</div>
<div ng-message="email">应为email</div>
<div ng-message="unique">用户名已存在</div>
</div>
</form>

在上面的messages插件Demo中,新建一行验证用户名已存在 以及 在input上添加了ensure-unique指令

同时,我们需要在js中定义ensure-unique指令:

angular.module('myApp', ['ngMessages']).directive('ensureUnique', ['$http', '$timeout', '$window', function ($http, $timeout, $window) {
return {
restrict: "A",
require: 'ngModel',
link: function (scope, ele, attrs, ngModelController) {
scope.$watch(attrs.ngModel, function (n) {
if (!n) return;
$timeout.cancel($window.timer);
$window.timer = $timeout(function () {
$http({
method: 'get',
url: '/api/checkusername/', //根据换成自己的url
params: {
"username": n
}
}).success(function (data) {
ngModelController.$setValidity('unique', data.isUnique); //这个取决于你返回的,其实就是返回一个是否正确的字段,具体的这块可以自己修改根据自己的项目
}).error(function (data) {
ngModelController.$setValidity('unique', false);
});
}, 500);
});
}
};
}]);

指令不是本节重点内容,这里简单说下

ngModelController.$setValidity('unique', bool);

通过该API可以设置$error.unique.

setValidity为true,则$error.unique为false

本文地址:http://www.cnblogs.com/neverc/p/5912340.html

[AngularJS] AngularJS系列(3) 中级篇之表单验证的更多相关文章

  1. angularjs学习第五天笔记(第二篇:表单验证升级篇)

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...

  2. [jQuery学习系列五 ]5-Jquery学习五-表单验证

    前言最近总是有一个感觉,虽然这些东西都自己学习并一个案例一个案例的去验证过了.但是总觉得不写成博客记录下来这些都不是自己的东西(心理作用,哈哈).所以每当学习或者复习相关的知识我都喜欢记录下来,下面开 ...

  3. 最适合入门的Laravel中级教程(三)表单验证

    做开发有个原则是永远不能信任用户输入的数据: 即便前端已经做了验证: 在后端 php 也必须要再次验证: laravel 为表单验证提供了强大且简单的方案: 创建示例路由: routes/web.ph ...

  4. AngularJS 1.2.x 学习笔记(表单校验篇)

    https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...

  5. AngularJs 入门系列-2 表单验证

    对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $sco ...

  6. AngularJS系列:表单全解(表单验证,radio必选,三级联动,check绑定,form提交验证)

    一.查看$scope -->寻找Form控制变量的位置 Form控制变量 格式:form的name属性.input的name属性.$... formName.inputField.$pristi ...

  7. angularjs学习第四天笔记(第一篇:简单的表单验证)

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...

  8. AngularJS 的表单验证

    最近开始学习angularjs,学到表单验证的时候发现有必要学习下大神的好文章: 转:http://www.oschina.net/translate/angularjs-form-validatio ...

  9. AngularJS中使用的表单验证

    Reference: http://www.tuicool.com/articles/2Qbiqi 客户端表单验证是AngularJS里面最酷的功能之一. AngularJS表单验证可以让你从一开始就 ...

随机推荐

  1. Expression Blend创建自定义按钮

    在 Expression Blend 中,我们可以在美工板上绘制形状.路径和控件,然后修改其外观和行为,从而直观地设计应用程序.Button按钮也是Expression Blend最常用的控件之一,在 ...

  2. vue.js初探

    前言 入手2016最火前端框架之一vue.js.大概从网上找了些资料看了下vue.js,从网上的资料来看只能惊叹其发展速度太快,让我意外的是其作者是华人的前提下作品这么受欢迎. 网上的博客和教程各种组 ...

  3. Linux之搭建自己的根文件系统

    Hi!大家好,我是CrazyCatJack.又和大家见面了.今天给大家带来的是构建Linux下的根文件系统.希望大家看过之后都能构建出符合自己需求的根文件系统^_^ 1.内容概述 1.构造过程 今天给 ...

  4. Java消息队列--ActiveMq 实战

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  5. iOS架构一个中型普通App的一些经验总结

    这一版比较完善的的App终于提交审核了.有时间写写自己的一些经验的总结了.自己主导的从0到比较成型的app到目前来说也只有两个,但是其中的很多东西都是大同小异.基本上是想到了什么就写什么,感觉写的不到 ...

  6. Linux主机上使用交叉编译移植u-boot到树莓派

    0环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS: Debian Jes ...

  7. 计算Div标签内Checkbox个数或已被disabled的个数

    先看下面的html: 计算div内的checkbox个数:$('#divmod input[type="checkbox"]').length 计算div内checkbox被dis ...

  8. 查看mac中磁盘空间占用情况

    今天发现磁盘空间不够了,首先要找到那些文件夹占用了磁盘空间. du命令很好使 du -c -d 1 -m | sort -n -c 显示当前文件夹总计占用空间 -d 1 层级为1,即只显示当前目录下一 ...

  9. SQL面试笔试经典题(Part 1)

    本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记,持续更新... 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.htm ...

  10. iOS 方法修饰符

     一.NS_DESIGNATED_INITIALIZER 用来修饰init方法,被修饰的方法称为designated initializer:没有被这个修饰的init方法称为convenience i ...