[AngularJS] AngularJS系列(3) 中级篇之表单验证

目录

基本验证


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<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插件之前,我们看下本来的验证提示


1

2

3

4

5

6

7

8

9

10

11

12

13

<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插件就是更友好的解决重复的问题


1

2

3

4

5

6

7

8

9

10

11

12

13

<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中的自定义验证,一般通过指令的形式创建.


1

2

3

4

5

6

7

8

9

<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指令:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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

时间: 2024-10-20 17:30:17

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

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

前言最近总是有一个感觉,虽然这些东西都自己学习并一个案例一个案例的去验证过了.但是总觉得不写成博客记录下来这些都不是自己的东西(心理作用,哈哈).所以每当学习或者复习相关的知识我都喜欢记录下来,下面开始到jQuery的表单验证.这里的表单验证都是最简单最基础的方式去完成,当然jQuery还有一些比较好的验证框架,这里就不提及了. 一,字段验证:1.1 字段非空 <form action="" method="post" id ="myform&quo

AngularJs 入门系列-2 表单验证

对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $scope 上下文对象上创建一个 model 来表示我们编辑的内容. $scope.model = { id : 8, name: "alice", email: "[email protected]" }; angularjs 的验证需要表单的配合,为了能够访问表单,我们需

AngularJS 的表单验证

最近开始学习angularjs,学到表单验证的时候发现有必要学习下大神的好文章: 转:http://www.oschina.net/translate/angularjs-form-validation 今天我们将来看看Angular如何帮助做表单验证. 我们将讨论更多使用angular进行有关表单操作的东西(就像我们另外的一篇文章: 提交Ajax表单:AngularJS的方式). 不过不用担心,那篇文章不一定要读的. 我们将重点放在客户端验证上,并使用Angular内置的表单属性.这里有一个 

AngularJS中使用的表单验证

Reference: http://www.tuicool.com/articles/2Qbiqi 客户端表单验证是AngularJS里面最酷的功能之一. AngularJS表单验证可以让你从一开始就写出一个具有交互性和可相应的现代HTML5表单. 在AngularJS中,有许多表单验证指令.在这里,我们将谈谈几个最流行指令,然后我们将讨论如何编写自定义的验证. <form name="form"> <label name="email">Y

AngularJs 表单验证

看到一些博客说这个框架要过时了,但是还是学习了下,觉的很方便的一个框架,有空的同学可以看看,适合我们入门看,比较基础. 对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $scope 上下文对象上创建一个 model 来表示我们编辑的内容. $scope.model = { id : 8, name: "alice", email: "

表单验证&amp;lt;AngularJs&amp;gt;

经常使用的表单验证指令 1. 必填项验证 某个表单输入是否已填写,仅仅要在输入字段元素上加入HTML5标记required就可以: <input type="text" required />   2. 最小长度 验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}": <input type="text" ng-minlength="5" /> 3.

AngularJS复习------表单验证

在AngularJS中能够将HTML5表单验证功能同自己的验证指令结合起来使用,这里介绍使用的核心功能. 使用表单验证,首先要确保表单的每个控件都有name属性 如果想要屏蔽浏览器对表单的默认验证行为,可以在表单元素上添加novalidate标记. 必填项:只需要在输入字段元素上添加HTML5标记 required即可 最小长度:在输入字段上使用AngularJS指令ng-minlength="{number}" 最大长度:在输入字段上使用AngularJS指令ng-maxlength

AngularJs的一个简单的表单验证

最近学习了AngularJs框架,觉得确实特别有用.之前学习了一点点的ASP.NET,它的控件也是挺好的,不过还是没有AngularJs轻巧. 定义一个应用程序myApp,一个控制器.接着是表单的验证. AngularJs中,表单控件的HTML元素有:input select button textarea元素 其实还算是很简单的例子. 不过我觉得对比起ASP那种庞大的控件来说,它确实很轻巧. AngularJS 输入验证$dirty 表单有填写记录$valid 字段内容合法的$invalid

angularJS 过滤器 表单验证

过滤器1.filter的作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果,主要用于数据的格式化.2.内置过滤器(1)Currency(货币)将一个数值格式化为货币格式,默认为$(2)Date(3)Filter子串匹配用来处理一个数组,可以过滤出含有某个子串的元素,作为一个字数组来返回.通常用来过滤需要展示的元素.可以是字符串数字,对象或是一个用来从数组中选择元素的函数.字符串:返回所有包含这个字符串的元素对象:将待过滤对象的属性同这个对象中的同名属性进行对比,如果属性值是字符串就