AngularJs表单验证

转载请注明出处 http://www.023996.cn/hyxw/s1129.html

Anjularjs表单验证

  能够基于用户以表单中输入的始末被出实时视觉反馈是坏主要之。在人口及丁沟通的语境中,表单验证被出去的上报及获正确输入同等重要。

  表单验证不仅能给用户提供可行之报告,同时为能够维护我们的Web应用不会见叫恶意还是失实的输入所破坏。我们只要以Web前端尽力保障后端。

  AngularJS能够将HTML5说明单验证功能与其和谐之辨证指令结合起来用,并且特别有利。AngularJS提供了成千上万表单验证指令。

<form name="form" novalidate>
    <label name="email">Your email</label>
    <input type="email" name="email" ng-model="email" placeholder="Email Address"/>
</form>

要用表单验证,首先使包表单像面的例证一样发生一个 name 属性。

  所有输入字段都可拓展着力的征,比如最要命、最小尺寸等。这些力量是出于新的HTML5说明单属性提供的。

  如果想如果屏蔽浏览器对表单的默认验证行为,可以当表单元素上添加
novalidate 标记

 

  1. 必填项 required 

  验证某个表单输入是否已经填写,只要以输入字段元素上添加HTML5标记
required 即可:

  注释:required 属性适用于以下
<input> 类型:text, search, url, telephone, email, password, date
pickers, number, checkbox, radio 以及 file

<input type="text" required />

   

  2. 极其小尺寸 ng-minleng=”{number}”

  验证表单输入的文本长度是否超过某个最小值,在输入字段上以AngularJS指令
ng-minleng=”{number}” 

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

 

  3. 最好要命尺寸 ng-maxlength=”{number}” 

  验证表单输入的文件长度是否低于或顶有最酷价值,在输入字段上利用AngularJS指令
ng-maxlength=”{number}” 

<input type="text" ng-maxlength="20" />

 

  4. 模式匹配  ng-pattern=”/PATTERN/”

  使用 ng-pattern=”/PATTERN/” 来保证输入会配合指定的正则表达式:

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

  

  5. 电子邮件

  验证输入内容是否是电子邮件,只要像下这样用 input 的种设置也
email 即可:

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

 

  6. 数字

  验证输入内容是否是数字,将 input 的路设置为 number :

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

 

 7. URL

  验证输入内容是否是URL,将 input 的种类设置也 url :

<input type="url" name="homepage" ng-model="user.facebook_url" />

 

当表单中控制变量

  表单的属性可以于那所属的 $scope 对象被走访到,而我辈以有何不可看
$scope
对象,因此JavaScript可以间接地访问DOM中之表单属性。借助这些性,我们得以本着表单做出实时(和AngularJS中其他东西同)响应。这些性包括下面这些。(注意,可以行使下的格式访问这些性。)

  formName.inputFieldName.property
 

 ■未修改的表单

  这是一个布尔属性,用来判断用户是否修改了表单。如果未修改,值也 true
,如果改动过价值吗 false

formName.inputFieldName.$pristine

 

 ■修改了之表单

  只要用户改了表单,无论输入是否通过认证,该值都回来 true 

formName.inputFieldName.$dirty

 

 ■合法的表单

  这个布尔型的习性用来判定表单的内容是否合法。如果手上表单内容是法定的,下面属性AngularJS的价就是是
true :

formName.inputFieldName.$valid

 

■ 不合法的表单

  这个布尔属性用来判断表单的情是否非合法。如果手上表单内容是匪合法的,下面属性之值也
true :

formName.inputFieldName.$invalid

 

■ 错误

  这是AngularJS提供的另外一个百般实用之属性: $error
对象。它富含当前表单的有证内容,以及它们是否合法的音信。用底的语法访问这特性:

formName.inputfieldName.$error

 

 

$parsers

  当用户与控制器进行交互,并且 ngModelController 中之 $setViewValue()
方法让调用时,$parsers 数组中之函数会因流水线的款式被逐个调用。第一单
$parse 被调用后,执行结果会传递让老二独 $parse ,以此类推

  这些函数可以针对输入值进行转换,或者经 $setValidity()
函数设置表单的合法性。

  使用 $parsers 数组是兑现自定义说明的不二法门之一。

  例如,假而我们怀念如果保证输入值在某片只数值之间,可以当 $parsers
数组中可栈一个初的函数,这个函数会在验证链中吃调用。

  每个 $parser 返回的值都见面受传出下一个 $parser
中。当不希望数据模型发生更新时返回undefined 。

 

 html 

<!DOCTYPE html>
<html ng-app="myApp">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>表单测试</title>
    <link rel="stylesheet" href="">
    <script type="text/javascript" src="angular.1.2.13.js"></script>
</head>
<body>
    <div ng-controller="TestController">
        <form name="testForm">
            <input type="number" name="inputs" ng-test ng-model="obj.number">
            good
            bad
            <div>{{ testForm.inputs.$valid }}</div>
            <div>{{ testForm.inputs.$invalid }}</div>
            <div>{{ obj.number }}</div>
        </form>
    </div>
    <script type="text/javascript" src="test5app.js"></script>
</body>
</html>

 

javascript  ( test5app.js
)

angular.module('myApp', []).controller('TestController', function($scope) {
    $scope.obj = {
        number: 34
    }
}).directive('ngTest', function() {
    return {
        require: '?ngModel',
        restrict: 'AE',
        link: function($scope, iElm, iAttrs, ngModel) {
            if (!ngModel) return;
            ngModel.$parsers.push(function(viewValue) {
                var num = parseInt(viewValue);
                if (num >= 0 && num < 99) {
                    ngModel.$setValidity('test', true);
                    return viewValue
                } else {
                    ngModel.$setValidity('test', false);
                    return undefined
                }
            })
        }
    }
});

 

相关文章