表单验证是angularJS一项重要的功能,能保证我们的web应用不会被恶意或错误的输入破坏。Angular表单验证提供了很多表单验证指令,并且能将html5表单验证功能同他自己的验证指令结合起来使用,进而在客户端验证时提供表单状态的实时反馈。

要使用表单验证,首先保证表单有一个name属性,一般的输入字段如最大,最小长度等,这些功能由html5表单属性提供,如果我们想屏蔽浏览器对表单的默认验证行为,可以在表单元素上添加novalidate标记。

表单基本格式如下:

<form name="form" novalidate>
<label for="email">你的邮箱:</label>
<input type="email" name="email" id="email" ng-model="user.email" placeholder="邮箱地址">
</form>

当然在input元素上还可以使用很多验证选项,比如:
1.必填项,设置某个表单输入是否已经填写,只需要在输入字段元素上添加require标记即可。

<input type="text" required>

2.最小(大)长度,验证表单输入的文本长度是否大于某个最小值,可以使用ng-minlength指令(ng-maxlength指令)

<input type="text" ng-minlength="5" ng-maxlength>

3.模式匹配,使用ng-pattern来确保输入匹配指定的正则表达式

<input type="text"  ng-pattern="/^[a-zA-Z]$/">

4. 电子邮件,只需要把input的类型设置为email即可

<input type="email" name="email" ng-model="user.email" >

5.数字,只需要将input的类型设置为number

<input type="number" name="age" ng-model="user.age">

6.URL,将input的类型设置为url

 
<input type="url" name="homepage" ng-modle="user.url">

7.自定义验证,在实际项目中我们通常会遇到比较复杂的验证,这时我们可以采用自定义验证。自定义验证使用的是自定义指令的方式,处理表单输入的内容,将结果转化为布尔值从而进行验证。比如我们需要向后台请求数据来判断用户名是否有效:

Html:

 
<input type="text" placeholder="username" name="usrename" ng-model="user.username" check-username="username">

自定义指令部分:(只是一个简单的势力)

app.directive('checkUsername', function($http){

                            return {

                                     require: 'ngModel',

                                     link: function(scope, ele, attrs, c){

                                               scope.$watch(attrs.ngModel, function(n){

                                                        if(!n) return;

                                                        $http({

                                                                 method: 'POST',

                                                                 url: '/api/check/' + attrs.username,

                                                                 data:{

                                                                           field: attrs.username,

                                                                           value: scope.ngModel

                                                                 }

                                                        }).success(function(data){

                                                                 c.$setValidity('unique', data.isUnique);

                                                        }).error(function(data){

                                                                 c.$setValidity('unique', false);

                                                        })

                                               });

                                     }

                            }

                   });

通过指令返回unique的布尔值来决定显示的警告信息。

由于表单的属性可以在其$scope对象中访问到,而我们又可以直接访问到$scope,因此js可以间接的访问DOM的表单属性,借助这些属性,我们可以对表单做出实时响应。

这些属性有:

1. 未修改的表单,用来判断用户是否修改了表单,如果修改了则为true,未修改则为false。

formName.inputFieldName.$pristine

2. 修改过的表单,只要用户修改过表单,无论输入是否通过验证,该值都将返回true

  1. formName.inputFieldName.$dirty

3. 合法的表单,这个属性是用来判断表单的内容是否合法的,如果合法则该属性的值为true

formName.inputFieldName.$valid

4. 不合法的表单,这个属性与上个属性正好相反,如果不合法,则该属性值为true

formName.inputFieldName.$invalid

5. 错误,$error对象包含了当前表单的所有验证内容,以及它们是否合法的信息,如果验证失败,该属性值为true,如果验证成功,则该值为false

formName.inputFieldName.$error

表单验证的基础部分暂时就这些,剩下的明天补上。

angularJS中的表单验证(包括自定义验证)的更多相关文章

  1. AngularJS中的表单验证

    AngularJS中的表单验证 AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证 1.使用angularjs的表单验证 正则式验证 只需要配置一个正则 ...

  2. EasyUI中在表单提交之前进行验证

    使用EasyUi我们可以在客户端表单提交之前进行验证,过程如下:只需在onSubmit的时候使用return  $("#form1").form('validate')方法即可,E ...

  3. AngularJS 表单提交后显示验证信息与失焦后显示验证信息

    虽然说AngularJS的实时表单验证非常有用,非常高效方便,但是当用户还没有完成输入时便弹出一个错误提示,这种体验是非常糟糕的. 正常的表单验证逻辑应该是在用户提交表单后或完成当前字段中的输入后,再 ...

  4. jq中的表单验证插件------jquery.validate

    今天我们来说一下表单验证,有人说我们在进行表单验证的时候使用正则来验证是非常麻烦的,现在我来给大家介绍一下表单验证的插件:jquery.validate.min.js 它是与jquery一起结合用来使 ...

  5. angular中的表单验证

    angular中的表单验证很强大, 一共有5中验证信息,$valid,$invalid,$pristine,$dirty,$error. $valid-----当验证通过的时候,为true,不通过的时 ...

  6. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  7. django中form表单的提交:

    一,关于表单: 表单在百度百科的解释:   表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...

  8. vue中的表单异步校验方法封装

    在vue项目的开发中,表单的验证必不可少,在开发的过程中,用的是vue+iview的一套,我们知道iview的表单验证是基于async-validator,对于async-validator不熟悉的可 ...

  9. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

随机推荐

  1. Git-回滚操作

    git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit git log 查询回滚版本唯一commit标识代码 git reset --ha ...

  2. Spring容器整合WebSocket

    原链接:http://blog.csdn.net/canot/article/details/52575054 WebSocker是一个保持web客户端与服务器长链接的技术.这样在两者通信过程中如果服 ...

  3. 【SQL】持久性存储模块PSM

    1. 创建PSM函数和过程 创建过程: CREATE PROCEDURE 名字 (参数) 局部声明: 过程体: 创建函数: CREATE FUNCTION 名字 (参数) RETURNS 类型 局部声 ...

  4. UVALive - 5844

    题是pdf版 Sample Input23mississippinni55i55ippi2foobar|=o08arSample Output10 /** 题意:给出一个normal串,一个leet串 ...

  5. 记一次Laravel定时任务导致日志没有写入权限的坑

    问题:用laravel开发定时任务时,发生了日志没有写入权限导致项目打不开的问题 原因:linux的添加定时任务时默认是当前登录用户,我定时任务会生成日志 crontab: kernel: 生成日志的 ...

  6. HSV与RGB的相互转换的公式

    H参数表示色彩信息,即所处的光谱颜色的位置.该参数用一角度量来表示,红.绿.蓝分别相隔120度.互补色分别相差180度.纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比 ...

  7. HDU 2553 N皇后问题【棋盘型DFS】

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. Codeforces 891B - Gluttony

    891B - Gluttony 题意 给出一个数字集合 \(a\),要求构造一个数组 \(b\) 为 \(a\) 的某个排列,且满足对于所有下标集合的子集 \(S=\{x_1,x_2,...,x_k\ ...

  9. LCA+差分【CF191C】Fools and Roads

    Description 有一颗 \(n\) 个节点的树,\(k\) 次旅行,问每一条边被走过的次数. Input 第一行一个整数 \(n\) (\(2\leq n\leq 10^5\)). 接下来 \ ...

  10. 二维树状数组+差分【p4514】上帝造题的七分钟

    Description "第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n\times m\)矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为\((a,b)\),右 ...