angularJS中的表單驗證(包括自定義驗證)


表單驗證是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

表單驗證的基礎部分暫時就這些,剩下的明天補上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM