Проверить угловую форму программно

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

Ввод выглядит так (нефрит)

 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;
            };
        }
    };
});

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

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

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

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


person Askar Ibragimov    schedule 03.06.2015    source источник
comment
Здесь stackoverflow.com/questions/30412661/ мой ответ на аналогичный вопрос.   -  person Mikalai    schedule 03.06.2015


Ответы (1)


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

           $timeout(function () {
                    $scope.subjCreationForm.subjectinput.$validate();
                });
person Askar Ibragimov    schedule 03.06.2015