AngularJS рдореЗрдВ рдлреЙрд░реНрдо рд╕рддреНрдпрд╛рдкрди

рд╕рддреНрдпрд╛рдкрди AngularJS рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рднреА рдЬрд╛рджреБрдИ рдирд╣реАрдВ рд╣реИред рдлрд╛рд░реНрдо , рдЗрдирдкреБрдЯ , рдЪрдпрди , textarea рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдирдХ HTML рдЯреИрдЧ рднреА рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред рдФрд░ рдЬрдм рд╡реЗ ngModel , рдЖрд╡рд╢реНрдпрдХ, ngPattern, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рддреНрдпрд╛рдкрди рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред


ngModel


рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рд╕рддреНрдпрд╛рдкрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:

рдЗрди рд╕рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ NgModelController рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди ( рдбреЗрдореЛ ) рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгред

  <input type="email" ng-model="myEmail"> 


рдЖрдХрд╛рд░


рдкреНрд░рдкрддреНрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рд╕рднреА рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рд░реВрдкреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдПрдХ рдлреЙрд░реНрдо рд╡реИрдз рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдлреЙрд░реНрдо рд╡реИрдз рд╣реИрдВред рдЖрдк рдПрдХ рдмрдбрд╝реЗ рд░реВрдк рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП ngForm рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдлреЙрд░реНрдо рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рджрд╛рдпрд░реЗ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреНрд░рдкрддреНрд░ рдЧреБрдгреЛрдВ рдФрд░ рдЗрд╕рдХреЗ рдирд╛рдорд┐рдд рдирд┐рдпрдВрддреНрд░рдгреЛрдВ ( рдбреЗрдореЛ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг:

рд╕рддреНрдпрд╛рдкрди рдФрд░ рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рднреА рд░реВрдкреЛрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: ng-invalid-required , ng-dirty , ng-valid , ng-valid-email ред

рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдирд╛


рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдкрд╛рд╕рд╡рд░реНрдб рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ - рдХрдо рд╕реЗ рдХрдо 6 рд╡рд░реНрдг, рдХрдо рд╕реЗ рдХрдо 1 рдЕрдВрдХ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЧреИрд░-рдбрд┐рдЬрд┐рдЯрд▓ рдЪрд░рд┐рддреНрд░ ( рдбреЗрдореЛ ):
  mod.directive('strongPassRequired', function () { var isValid = function(s) { return s && s.length > 5 && /\D/.test(s) && /\d/.test(s); }; return { require:'ngModel', link:function (scope, elm, attrs, ngModelCtrl) { ngModelCtrl.$parsers.unshift(function (viewValue) { ngModelCtrl.$setValidity('strongPass', isValid(viewValue)); return viewValue; }); ngModelCtrl.$formatters.unshift(function (modelValue) { ngModelCtrl.$setValidity('strongPass', isValid(modelValue)); return modelValue; }); } }; }); 

$setValidity рд╡рд┐рдзрд┐ рдореЗрдВ, рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:


рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдирд┐рд░реНрджреЗрд╢


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдлрд╝реЙрдиреНрдЯ рд╡рд┐рд╕реНрдордпрдХрд╛рд░реА рд╕реЗ рдПрдХ рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, required рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ ( рдбреЗрдореЛ - рджреВрд╕рд░реЗ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП, required рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдирд┐рд░реНрджреЗрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб:
 .directive('uiCheckbox', function () { return { restrict: 'EA', replace: true, transclude: true, template: '<div class="checkbox-control" ng-click="toggle()">' + '<span ng-class="{\'icon-check-empty\': !value, \'icon-check\': value}"></span>' + '<span class="checkbox-label" ng-transclude></span>' + '</div>', require: 'ngModel', scope: true, link: function (scope, element, attrs, ngModelCtrl) { scope.value = false; ngModelCtrl.$render = function () { scope.value = ngModelCtrl.$viewValue; }; scope.toggle = function () { scope.value = !scope.value; ngModelCtrl.$setViewValue(scope.value); }; } }; }); 

рдпрд╣рд╛рдБ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ рд╣реИрдВ:


рд╕рддреНрдпрд╛рдкрди рдФрд░ рдкреГрдердХ рдЧреБрдВрдЬрд╛рдЗрд╢ рдирд┐рд░реНрджреЗрд╢


рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдХ рд╣реИ, рд╕рддреНрдпрд╛рдкрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрджреЗрд╢ рдЖрджрд┐ред рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрдИ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреБрд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдХ, рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛, рдкрд╣рдЪрд╛рди рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪред рдФрд░ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдФрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрди рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЗрд╕ рдмреНрд▓реЙрдХ рдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред рдФрд░ рд╕рддреНрдпрд╛рдкрди рдкрд░рд┐рдгрд╛рдо рдореВрд▓ рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдкреИрд░реЗрдВрдЯ рдлреЙрд░реНрдо рдХреЛ рдбреЛрдо рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдХреЛрдк рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдкрд░ рдирд╣реАрдВред

рдЕрдЫреВрддрд╛ рд░реВрдк


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдк рд╣реИред рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд╛рдо рднрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рд╡рд░рдг рдФрд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реГрдЬрди рдкреНрд░рдкрддреНрд░ рдЕрдорд╛рдиреНрдп рд╣реЛрдиреЗ рддрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдмрдЯрди рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирдИ рд╕рд╛рдЗрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд╛рдо рдФрд░ рдпреВрдЖрд░рдПрд▓ рдлрд╝реАрд▓реНрдб рднрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдФрд░ рдЬрдм рддрдХ рд╡реЗ рднрд░реЗ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдмрдЯрди рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд╛рдЗрдЯреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдореНрдмреЗрдбреЗрдб рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╡реИрдзрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд░реВрдк рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдпрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдкреЗрд╢ рдХрд░реЗрдЧрд╛ред рдбреЗрдореЛ ред
рдирд┐рд░реНрджреЗрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб:
 mod.directive('isolatedForm', function(){ return { require: 'form', link: function(scope, formElement, attrs, formController) { var parentFormCtrl = formElement.parent().controller('form'); var core$setValidity = formController.$setValidity; formController.$setValidity = function(validationToken, isValid, control) { core$setValidity(validationToken, isValid, control); if (!isValid && parentFormCtrl) { parentFormCtrl.$setValidity(validationToken, true, formController); } } } }; }); 

рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рд╣рд░ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдкреНрд░рдкрддреНрд░ рдКрдкрд░ рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрдорд╛рдиреНрдп рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдорд╛рдиреНрдп рд╣реИред

Source: https://habr.com/ru/post/In167793/


All Articles