Как установить Validator в required, если он виден?

мне интересно, как я могу установить валидатор в следующей форме на требуемый, только если присутствует элемент формы:

<div *ngIf="form.controls.user.value !== 'Admin' && form.controls.user.value ">
        <label>Role:</label>
        <input type="text" ngControl="role">
</div>

и моя форма:

       this.form = this._formBuilder.group({
        user: ['',Validators.required],
        role: ['', Validators.required]
    });

3 ответов


в вашем случае вы создадите глобальный валидатор. Что-то вроде этого:--4-->

this.form = this._formBuilder.group({
  user: ['', Validators.required],
  role: ['']
}, { validator: (group) => {
  if (group.controls.user.value !== 'Admin') {
    return Validators.required((group.controls.role);
  }
  return null;
}});

в этом случае форма действительна (this.форма.valid = = = true) в следующем случае:

  • пользователь не пуст, отличается от Admin и роль не пуста
  • пользователь Admin

посмотреть в этом plunkr: https://plnkr.co/edit/UKyRiq?p=preview.

см. этот вопрос Для больше подробности:


можно использовать disable() и enable() функции. Если элемент управления формы отключен, проверка не применяется к этому элементу управления.

this.form.controls.user.disable();
this.form.controls.role.disable();

С помощью шаблона это можно сделать таким образом -

<input [(ngModel)]="page.headerImageWidth" [required]="page.isHeaderAvailable">