2015-01-20 6 views
0

Может ли кто-нибудь объяснить мне, как работает этот кусок кода.Может ли кто-нибудь объяснить мне эту директиву по паролю?

HTML Markup

<input type="password" ng-model="password" class="form-control" placeholder="Password" required> 
<input type="password" ng-model="confirm_password" class="form-control" placeholder="Password" required validate-equals="password"> 

Директива Код

'использовать строгий';

angular.module('raJwtApp') 
    .directive('validateEquals', function() { 
    return { 
     require: "ngModel", 
     link: function postLink(scope, element, attrs, ngModelCtrl) { 
     function validate(value){ 
      console.log(value, scope.$eval(attrs.validateEquals)); 
      var valid = (value === scope.$eval(attrs.validateEquals)); 
      ngModelCtrl.$setValidity('equal', valid); 
      return valid ? value : undefined; 
     } 

     ngModelCtrl.$parsers.push(validate); 
     ngModelCtrl.$formatters.push(validate); 

     scope.$watch(attrs.validateEquals, function(){ 
      ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue); 
     }) 
     } 
    }; 
    }); 

Может ли кто-нибудь объяснить мне ниже questions.

Что делает код ниже в directive?. Я действительно не понимаю, как работает эта директива соответствия паролю.

$scope.watch(attrs.validateEquals, function(){ 
    //ngModelCtrl.$viewValue always returns undefined  
    ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue); 
}); 

ответ

0

Угловая не имеет $ SetDirty (хотя у него есть $ setPristine), так как установить модель, как грязный это через свой контроль:

ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue); 

В вашей директиве , поэтому $ watch проверяет изменение атрибута validateEquals (пароль), а затем устанавливает, что модель загрязнена.

0
<form name="password_form"> 
    <input type="password" ng-model="password" class="form-control" placeholder="Password" required> 
    <input type="password" ng-model="confirm_password" class="form-control" placeholder="Password" required validate-equals="password"> 
</form> 
<button ng-disabled="password_form.$invalid">save</button> 

в <form>, вы можете сделать угловую проверки, проверяя флаги одной из форм, таких как $invalid или $error (https://docs.angularjs.org/guide/forms (Пользовательские проверки))

Это полезно для простой проверки, такие как:

  • a обязательное поле (добавление required к <input>) или
  • минимальное количество символов (с добавлением min='5')

и password_form.$invalid будут автоматически установлены, если сбой обоих требований.

validate-equals является директивой установить флаг формы $invalid (или $dirty?) Вручную, если два поля пароля не совпадают.

$setViewValue призван переоценить действительность формы.

Функции проверки выполняются каждый раз, когда ввод изменяется (вызывается $ setViewValue) или всякий раз, когда изменяется связанная модель.

Смежные вопросы