2015-03-17 4 views
3

Я использую $validator, чтобы написать настраиваемую форму проверки валидации.

В настоящее время это выглядит следующим образом:

module.directive('tweetLength', function(URLDetector) { 
    return { 
    restrict: 'A', 
    require: 'ngModel', 
    link: function(scope, element, attrs, ctrl) { 
     var allowedCharacters; 
     allowedCharacters = parseInt(attrs.tweetLength); 

     ctrl.$validators.tweetLength = function(modelValue, viewValue) { 
     var result; 
     return result = URLDetector.urlAdjustedCharacterCount(modelValue) <= allowedCharacters; 
     }; 
    } 
    }; 
}); 

Он проверяет модель элемента он прикреплен к количеству символов, в то время как с учетом ссылок укорочения (так ng-minlength и ng-maxlength не работают) , Он возвращает false, когда требования не выполняются. Проблема в том, что когда он возвращает false modelValue идет undefined. Я знаю, что в этот момент значение предназначено для хранения в $$invalidModelValue, но мне все еще нужно значение в исходной модели, так как оно используется в другом месте в представлении.

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

+1

Вы можете. Из документа [docs] (https://docs.angularjs.org/api/ng/directive/ngModelOptions) 'ng-model-options =" ​​{allowInvalid: true} "' – aarosil

+0

Это именно он. –

ответ

7

Начиная с угловыми против 1,3, когда $validate() возвращает ложное значение ng-model устанавливается в неопределенных (документы here)

Чтобы предотвратить такое поведение, установите allowInvalid свойство ngModelOptions истинно, например, так:

ng-model-options="{allowInvalid: true}" 
Смежные вопросы