Ограниченные имена валидаторов в Angular
Я создал собственный валидатор и прикрепил его к модели элемента ввода, например:
ngModel.$validators.required = function (value) {
return !!value;
}
И это не работает - функция даже не вызывается. Однако переименование его из required
в alsoRequired
- это называется правильно.
Есть ли у Angular некоторые ограничения по именованию валидаторов?
2 ответа
Недостаточно кода, чтобы точно понять, что происходит, но я могу догадаться, в чем ваша ошибка:
ngModel.$validators
устанавливается любой директивой, которая решает его установить. Например, входная директива с type="email"
наборы $validators.email
; ng-required
наборы директив $validators.required
, и так далее.
Ты можешь иметь ng-model
установить на пользовательскую директиву или даже на <input type="text">
, который сам по себе не регистрирует валидатор.
Пользовательские директивы, как и ваши, могут зарегистрировать валидатор:
link: function(scope, element, attrs, ngModel){
ngModel.$validators.required = function (value) {
console.log(value); // this will fire if parsers do not return undefined
return !!value;
};
})
И если в сочетании с ng-model
, должно работать нормально:
<input type="email" ng-model="foo" my-dir>
http://plnkr.co/edit/1oQGRWZ0kWlV6Q7WjvrY?p=preview
Чтобы ответить на ваш вопрос, вероятная причина, почему ваш $validators.required
Функция не вызывается, потому что у вас есть другая директива, которая перезаписывает это значение - например, ng-required
,
Вы можете установить обязательное поле динамически для этого вы можете использовать ng-required="expression"
вместо использования валидатора. который добавит required
приписать условно, если expression
было бы true