[AngularJS] AngularJS系列(3) 中級篇之表單驗證

來源:互聯網
上載者:User

標籤:

目錄

  • 基本驗證
  • 驗證外掛程式messages
  • 自訂驗證

 

基本驗證
    <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) 中級篇之表單驗證

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.