2013-09-30 16 views
22
link: function(scope, elm, attrs, ctrl) { 
     ctrl.$parsers.unshift(function(viewValue) { 

      scope.pwdValidLength = (viewValue && viewValue.length >= 8 ? 'valid' : undefined); 
      scope.pwdHasLetter = (viewValue && /[A-z]/.test(viewValue)) ? 'valid' : undefined; 
      scope.pwdHasNumber = (viewValue && /\d/.test(viewValue)) ? 'valid' : undefined; 

      if(scope.pwdValidLength && scope.pwdHasLetter && scope.pwdHasNumber) { 
       ctrl.$setValidity('pwd', true); 
       return viewValue; 
      } else { 
       ctrl.$setValidity('pwd', false);      
       return undefined; 
      } 

     }); 
    } 

http://jsfiddle.net/adamdbradley/Qdk5M/

W powyższej ryba w jaki sposób odbywa się sprawdzanie poprawności hasła? Co robi plik $ parser.unshift? i jaki jest pożytek z testu (viewValue) .....? Mam mowa angularjs główną stronę, ale nie mógł zrozumieć niczego ... proszę kierować mi krok po kroku, jak to jest sprawdzanie ...

Jestem nowy angularjs ..

Odpowiedz

60

Poniżej znajduje się wyjaśnienie krok po kroku. Zwróć uwagę, że dokumentacja jest naprawdę dobra: strony o numerach the forms i the $parsers to te, których szukasz.

link: function(scope, elm, attrs, ctrl) { 
    /** 
    * This function is added to the list of the $parsers. 
    * It will be executed the DOM (the view value) change. 
    * Array.unshift() put it in the beginning of the list, so 
    * it will be executed before all the other 
    */ 
    ctrl.$parsers.unshift(function(viewValue) { 

     scope.pwdValidLength = (viewValue && viewValue.length >= 8 ? 'valid' : undefined); // Check the length of the string 
     scope.pwdHasLetter = (viewValue && /[A-z]/.test(viewValue)) ? 'valid' : undefined; // Check if the string contains letter. RegExp.test() simply returns a boolean if the string matches the regex. 
     scope.pwdHasNumber = (viewValue && /\d/.test(viewValue)) ? 'valid' : undefined; // Check if the string contains digit. Same remark. 

     if(scope.pwdValidLength && scope.pwdHasLetter && scope.pwdHasNumber) { // If all is good, then… 
      ctrl.$setValidity('pwd', true); // Tell the controlller that the value is valid 
      return viewValue; // Return this value (it will be put into the model) 
     } else { // … otherwise… 
      ctrl.$setValidity('pwd', false); // Tell the controlller that the value is invalid 
      return undefined; // When the value is invalid, we should return `undefined`, as asked by the documentation 
     } 

    }); 
} 
+1

Świetna odpowiedź. Powinny zostać zaakceptowane. – hitokiri82

+0

Dla jasności, $ parsery to tablica (czyli standardowy typ javascript, nie specyficzny dla Angular). unshift jest metodą macierzystą dla prototypu Javascript Array, dlatego komentarz w tej odpowiedzi "Array.unshift() umieścił go na początku listy ..." To ważne rozróżnienie, myślę, ponieważ początkujący mogą być zdezorientowani pomiędzy tym, co jest kątowe, a tym, co jest rodzimym JS. – dudewad