Ограниченные имена валидаторов в 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

Другие вопросы по тегам