2014-02-05 4 views
0

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

"use strict"; 

angular.module("kap.directive") 
    .directive('kapValidationDuration', ['$timeout', '$log', function ($timeout, $log) { 
     return { 
      restrict: 'A', 
      require: 'ngModel', 
      scope: { minReservationDurationMinutes: '=minReservationDurationMinutes' }, 
      link: function (scope, element, attrs, ctrl) { 
       if (attrs.type === 'radio' || attrs.type === 'checkbox') { 
        return; 
       } 

       ctrl.$parsers.push(function (value) { 
        if(value && !element[0].hidden) { 

         var lTimeValues = value.split(":"), 
         lHoursToMinutes = parseInt(lTimeValues[0], 10) * 60, 
         lMinutes = parseInt(lTimeValues[1], 10), 
         lMinReservationDurationMinutes = parseInt(attrs.minreservationdurationminutes, 10) || 10, 
         lValidity = true; 


        if ((lHoursToMinutes + lMinutes) < lMinReservationDurationMinutes) { 
         lValidity = false; 
        } 

        ctrl.$setValidity('kapValidationDuration', lValidity); 
        } 

        return value; 
       }); 
      } 
     }; 
    }]); 

ответ

1

Для того, чтобы сделать это, то есть подтвердить начальные значения, а также, вы также должны использовать $formatters. Luckilly, в вашем случае, вы просто должны unshiftтакой же функции $formatters, как и тот, который используется для $parsers.

Причина в том, что анализаторы используются при движении формы →. В общем случае это означает преобразование данных: если модель была числом, вход пользователя всегда является строкой и должен быть преобразован; ошибки могут быть не только проверкой (например, «возраст должен быть положительным»), но и синтаксический анализ (например, «tata» не является допустимым числом »). Форматирует при переходе модели →. Это, как следует из названия, форматирование: например. a Date объект может отображаться как dd/MM/yyyy в моей местности (греческий), но MM/dd/yyyy в других местах.

Смотрите эту скрипку: http://jsfiddle.net/52dAB/

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

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