@historydev
Острая аллергия на анимешников

Как правильно работать с валидацией формы?

В документации angular приведён такой пример:
<input type="text" id="name" class="form-control"
      formControlName="name" required>

<div *ngIf="name.invalid && (name.dirty || name.touched)"
    class="alert alert-danger">

  <div *ngIf="name.errors?.['required']">
    Name is required.
  </div>
  <div *ngIf="name.errors?.['minlength']">
    Name must be at least 4 characters long.
  </div>
  <div *ngIf="name.errors?.['forbiddenName']">
    Name cannot be Bob.
  </div>
</div>

Допустим у нас 10 полей, копипастить на каждое новое поле вообще не решение.

Сейчас я пишу какой-то костыль свой по ключам объекта form.controls пробегаюсь, потом прокидываю имя в метод который получает нужный элемент и уже там делаю все сравнения:
<div class="validation" *ngFor="let name of form.controls | keyvalue">
			<div *ngIf="form_field(name.key)?.errors?.['required'] && check_field(form_field(name.key))">
				{{ name.key }} is required.
			</div>
		</div>

public check_field(field: AbstractControl<any, any> | null) {
		return field?.invalid && (field?.dirty || field?.touched);
	}

	public form_field(name: string) {
		return this._form.get(name);
	}


По моему я просто пишу говно код, подскажите как это сделать правильно?
  • Вопрос задан
  • 23 просмотра
Пригласить эксперта
Ответы на вопрос 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Сделать компонент-обертку или директиву, которая будет получать NgControl, слушать его, получать ошибки и рендерить.
Ну например так https://stackblitz.com/edit/angular-ivy-yiy8tv?fil...
Вместо ngIf можно прикрутить динамический рендеринг.

Вот статья есть https://netbasal.com/make-your-angular-forms-error...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы