рд╕рддреНрдпрд╛рдкрди AngularJS рдХреА
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рднреА рдЬрд╛рджреБрдИ рдирд╣реАрдВ рд╣реИред
рдлрд╛рд░реНрдо ,
рдЗрдирдкреБрдЯ ,
рдЪрдпрди ,
textarea рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдирдХ HTML рдЯреИрдЧ рднреА
рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред рдФрд░ рдЬрдм рд╡реЗ
ngModel , рдЖрд╡рд╢реНрдпрдХ, ngPattern, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рддреНрдпрд╛рдкрди рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
ngModel
рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рд╕рддреНрдпрд╛рдкрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:
- рдореЙрдбрд▓ рдФрд░ рджреГрд╢реНрдп рдХреЗ рдмреАрдЪ рджреЛ-рддрд░рдлрд╝рд╛ рдмрдВрдзрди (рдирд┐рдпрдВрддреНрд░рдг / рдирд┐рд░реНрджреЗрд╢
input
, textarea
, select
, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ); - рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
$render()
, $setValidity()
, $setViewValue()
, $parsers
, $formatters
, рдЖрджрд┐ред (рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢ / рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП required
, number
, email
, url
, ngPattern
рдЖрджрд┐); - рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ (рд╡реИрдз / рдЕрдорд╛рдиреНрдп, рдЧрдВрджрд╛ / рдкреНрд░рд╛рдЪреАрди, рд╕рддреНрдпрд╛рдкрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ);
- рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХрдХреНрд╖рд╛рдПрдВ рд╕реЗрдЯ рдХрд░рдирд╛ (рдПрдирдЬреА-рд╡реИрдз, рдПрдирдЬреА-рдЕрдорд╛рдиреНрдп, рдПрдирдЬреА-рдЧрдВрджрд╛, рдПрдирдЬреА-рдкреНрд░рд┐рд╕реНрдЯрд╛рдЗрди);
- рдореВрд▓ рдкреНрд░рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред
рдЗрди рд╕рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ
NgModelController рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди (
рдбреЗрдореЛ ) рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгред
<input type="email" ng-model="myEmail">
рдЖрдХрд╛рд░
рдкреНрд░рдкрддреНрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рд╕рднреА рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рд░реВрдкреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдПрдХ рдлреЙрд░реНрдо рд╡реИрдз рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдлреЙрд░реНрдо рд╡реИрдз рд╣реИрдВред рдЖрдк рдПрдХ рдмрдбрд╝реЗ рд░реВрдк рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП
ngForm рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдлреЙрд░реНрдо рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рджрд╛рдпрд░реЗ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреНрд░рдкрддреНрд░ рдЧреБрдгреЛрдВ рдФрд░ рдЗрд╕рдХреЗ рдирд╛рдорд┐рдд рдирд┐рдпрдВрддреНрд░рдгреЛрдВ (
рдбреЗрдореЛ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг:
myForm.myInput.$valid
myForm.myInput.$error
myForm.$invalid
myForm.$error.required
рд╕рддреНрдпрд╛рдкрди рдФрд░ рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рднреА рд░реВрдкреЛрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
ng-invalid-required
,
ng-dirty
,
ng-valid
,
ng-valid-email
ред
рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдирд╛
рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
- рдореЙрдбрд▓ рдкрд░рд┐рд╡рд░реНрддрди - $ рд╕реНрд╡рд░реВрдкрдХ рд╕рд░рдгреА рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрдиреНрд╡реЗрдпрд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛;
- рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди - $ рдкрд╛рд░реНрд╕рд░реНрд╕ рд╕рд░рдгреА рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, $ setViewValue рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реЛрдЧрд╛ред
рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдкрд╛рд╕рд╡рд░реНрдб рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ - рдХрдо рд╕реЗ рдХрдо 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
рд╡рд┐рдзрд┐ рдореЗрдВ, рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
- рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП
$error
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, myPassForm.myPass.$error.strongPass
; - рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдПрд╕рдПрд╕ рд╡рд░реНрдЧ (
ng-valid-strong-pass
рдпрд╛ ng-invalid-strong-pass
) рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рд╕рднреА рдореВрд▓ рд░реВрдкред
рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдирд┐рд░реНрджреЗрд╢
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдлрд╝реЙрдиреНрдЯ рд╡рд┐рд╕реНрдордпрдХрд╛рд░реА рд╕реЗ рдПрдХ рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
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); }; } }; });
рдпрд╣рд╛рдБ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ рд╣реИрдВ:
- рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐
ngModelController
рдХреЛ link
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - require: 'ngModel'
; ngModelCtrl.$render
рдореЗрдердб рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ngModelCtrl.$render
- рдЬрдм ngModel
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореЙрдбрд▓ ngModel
;- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рдореЙрдбрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдкрдХреЛ
ngModelCtrl.$setViewValue
рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, $ рдкрд╛рд░реНрд╕рд░реНрд╕ рд╕рд░рдгреА рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рддреНрдпрд╛рдкрди рдФрд░ рдкреГрдердХ рдЧреБрдВрдЬрд╛рдЗрд╢ рдирд┐рд░реНрджреЗрд╢
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдХ рд╣реИ, рд╕рддреНрдпрд╛рдкрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрджреЗрд╢ рдЖрджрд┐ред рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрдИ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреБрд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдХ, рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛, рдкрд╣рдЪрд╛рди рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪред рдФрд░ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдФрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрди рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЗрд╕ рдмреНрд▓реЙрдХ рдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред рдФрд░ рд╕рддреНрдпрд╛рдкрди рдкрд░рд┐рдгрд╛рдо рдореВрд▓ рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдкреИрд░реЗрдВрдЯ рдлреЙрд░реНрдо рдХреЛ рдбреЛрдо рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдХреЛрдк рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдкрд░ рдирд╣реАрдВред
рдЕрдЫреВрддрд╛ рд░реВрдк
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдк рд╣реИред рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд╛рдо рднрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рд╡рд░рдг рдФрд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реГрдЬрди рдкреНрд░рдкрддреНрд░ рдЕрдорд╛рдиреНрдп рд╣реЛрдиреЗ рддрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдмрдЯрди рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирдИ рд╕рд╛рдЗрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд╛рдо рдФрд░ рдпреВрдЖрд░рдПрд▓ рдлрд╝реАрд▓реНрдб рднрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдФрд░ рдЬрдм рддрдХ рд╡реЗ рднрд░реЗ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдмрдЯрди рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд╛рдЗрдЯреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдореНрдмреЗрдбреЗрдб рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╡реИрдзрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд░реВрдк рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдпрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдкреЗрд╢ рдХрд░реЗрдЧрд╛ред
рдбреЗрдореЛ ред
рдирд┐рд░реНрджреЗрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб:
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); } } } }; });
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рд╣рд░ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдкреНрд░рдкрддреНрд░ рдКрдкрд░ рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрдорд╛рдиреНрдп рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдорд╛рдиреНрдп рд╣реИред