2015-06-03 6 views
0

У меня есть угловая директива, используемая в качестве атрибута для проверки ввода.Подтвердить угловую форму программно

ввода выглядит следующим образом (нефрит)

input.form-control(type='text', name='subjectinput', id='subjectinput', subjectid-noprefix-validator='(subject.nosuffix==1)') 

и валидатор выглядит

.directive('subjectidNoprefixValidator', function() {  
    return { 
     require: ['^form', 'ngModel'], 
     scope: { 
      noprefixformat: '=subjectidNoprefixValidator' 
     }, 
     link: function (scope, element, attrs, ctrls) { 

      scope.form = ctrls[0]; // so we can use form reference in displaying error messages 
      var ngModel = ctrls[1]; 
      ngModel.$validators.subjectidnoprefix = function (value) { 
       var status = true; 
       // removed some logic that sets status true or false 
       // using $scope.noprefixformat parameter 
       return status; 
      }; 
     } 
    }; 
}); 

Он отлично работает. Однако иногда в действиях страницы происходит событие, которое требует проверки на повторное включение в INPUT, не касаясь его; некоторые изменения переключателя должны повторно запускать его и обновлять статус проверки (как вы видите, мой валидатор имеет параметр).

Я пытался добиться ее, позвонив в страницу контроллера

$scope.subjCreationForm.subjectinput.$validate(); 

, но это не похоже на работу. Что может быть и есть ли другой способ инициировать проверку поля программно, когда он использует $ validators?

+1

Здесь http://stackoverflow.com/questions/30412661/force-asyncvalidators-in- angularjs/30503030 # 30503030 мой ответ на аналогичный вопрос. – Mikalai

ответ

0

Найдено ядро ​​моей проблемы, $ применять должен вызываться вручную, что может быть достигнуто, например:

  $timeout(function() { 
        $scope.subjCreationForm.subjectinput.$validate(); 
       }); 
Смежные вопросы