AngularJS入門基礎——表單驗證

來源:互聯網
上載者:User

標籤:

<form name="form" novalidata>

  <label name="email">your email</label>   <input type="email" name="email" ng-model="email" placeholder="Email Address"> </form> /*如下是朋友空間的內容*/ angular 進階校正特性

    在一些情況下,單獨的表單驗證並不能滿足需要,可能有一些特殊的校正,比如關聯兩個資料等等.通常這類校正都是可複用的,也就是需要一個directive.編寫的自訂校正的 directive 並不複雜,首先需要瞭解幾個 Angular 提供的屬性和介面.

    1. $setValidity()

    這個方法可以人為的設定一個表單控制項的$valid 以及$ invalid, 也就是說改變表單控制項是否通過校正的狀態.類似的還有$setDirty()和$setPristine().

?
1 ngModel.$setValidity(‘max-custom‘true);    // 類似這樣的設定就將一個表單控制項的狀態改變了, ngModel 是 directive 的 link 的第四個參數,$setValidity 的第一個參數可以定義一個標誌,第二個參數true 表示通過驗證, false 表示未通過

    2. $parsers

    這個屬性解釋起來稍微有點抽象,當 ngModel 的值發生變化的時候,Angular 會自己調用 $setViewValue(value),然後 ngModel 的 $parsers 數組中得函數會被逐個調用,當 $parsers[0] 中的方法被調用後執行結果會傳遞給 $parsers[1],以此類推,這些函數可以對 ngModel 的值進行轉換或者通過 $setValidity() 設定表單的合法性.

    所以如果我們想實現點什麼特殊的校正,可以在 $parsers 中插入一個 function, 然後它會在驗證鏈結中被調用,如果不希望資料模型發生更新,讓 $parsers 的函數傳回值返回 undefined 即可.

?
12345678910111213141516171819 .directive(‘maxMax‘function(){  return {    require: ‘ngModel‘,    restrict: ‘A‘,    link: function($scope, iElm, iAttrs, ngModel) {      if(!ngModel) return;      ngModel.$parsers.unshift(function(viewValue){        var num = parseInt(viewValue);        if(num>=0 && num<99){          ngModel.$setValidity(‘maxMax‘,true);          return viewValue;        }else{          ngModel.$setValidity(‘maxMax‘,false);          return undefined;        }      });    }  };})

  

紅色字型部分經過我的實踐及探索,發現有誤,正確的應該如下:

所以如果我們想實現點什麼特殊的校正,可以在 $parsers 中插入一個 function, 然後它會在驗證鏈結中被調用,如果不希望資料模型發生更新,讓 $parsers 的函數傳回值返回 原值 即可. 

12345678910111213141516171819 .directive(‘maxMax‘function(){  return {    require: ‘ngModel‘,    restrict: ‘A‘,    link: function($scope, iElm, iAttrs, ngModel) {      if(!ngModel) return;      ngModel.$parsers.unshift(function(viewValue){        var num = parseInt(viewValue);        if(num>=0 && num<99){          ngModel.$setValidity(‘maxMax‘,true);          return viewValue;        }else{          ngModel.$setValidity(‘maxMax‘,false);          return viewValue; // 這裡如果返回 undefined 則會導致部分ng內建驗證器失效,因為擷取不到ngModel.$viewValue的值了。        }      });    }  };})
 

AngularJS入門基礎——表單驗證

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.