Angular 8 - проверка формы не работает должным образом - PullRequest
2 голосов
/ 07 января 2020
<mat-form-field class="input-label-add">
  <input matInput placeholder="Registration **" formControlName="registration">
  <mat-error *ngIf="addLockerForm.get('registration').hasError('maxlength')">registration cannot exceed 8 characters</mat-error>
  <mat-error *ngIf="addLockerForm.get('registration').errors">registration or surname is required</mat-error>
</mat-form-field> 
this.addLockerForm =  this.formBuilder.group({
    locker_serial_number: [null, Validators.required],
    customer_surname: [null],
    registration: [null, Validators.maxLength(10)],
    mobile: [null],
    email: [null],
    date_in: [null, Validators.required],
    date_out: [null, Validators.required], 
  },
  { validator: [this.validateCustomerDetails, this.validateCustomerContact] });

addLockerForm.get ('registration'). HasError ('maxlength') остается ложным все время

Ответы [ 4 ]

1 голос
/ 07 января 2020

Проблема была в моем пользовательском методе проверки, где я удаляю все ошибки для следующего элемента управления формы. Я забыл об этом методе. Спасибо всем за помощь.

validateCustomerDetails(g: FormGroup) {
if ((isNullOrUndefined(g.get('registration').value) || g.get('registration').value == "") &&
  (isNullOrUndefined(g.get('customer_surname').value) || g.get('customer_surname').value == "")) {
  g.controls['registration'].setErrors({ 'empty': true });
  g.controls['customer_surname'].setErrors({ 'empty': true });
}
else {
  g.controls['registration'].setErrors(null);
  g.controls['customer_surname'].setErrors(null);
}
1 голос
/ 07 января 2020

Не могли бы вы попробовать это?

addLockerForm.get('registration').errors.maxlength

https://angular.io/guide/form-validation#validator -функции

РЕДАКТИРОВАТЬ 1

Вы надеваете не нужно использовать .errors.

Пожалуйста, обновите ваш код следующим образом:

<mat-form-field class="input-label-add">
  <input matInput placeholder="Registration **" formControlName="registration">
  <mat-error *ngIf="addLockerForm.get('registration').hasError('maxlength')">registration cannot exceed 8 characters</mat-error>
  <mat-error *ngIf="addLockerForm.get('registration').hasError('required')">registration or surname is required</mat-error>
</mat-form-field> 
registration: [null, [Validators.required, Validators.maxLength(8)]], 
0 голосов
/ 07 января 2020

попробуйте следующий код

<mat-form-field class="input-label-add">
   <input matInput placeholder="Registration **" formControlName="registration">
   <div *ngIf="registration.errors">
      <mat-error *ngIf="addLockerForm.get('registration').errors.maxlength">
         registration cannot exceed 8 characters</mat-error>
      <mat-error *ngIf="addLockerForm.get('registration').errors.required">registration or surname is required</mat-error>
   </div>
</mat-form-field>
0 голосов
/ 07 января 2020
  *ngIf="addLockerForm.controls?.registration?.invalid && addLockerForm.controls?.registration?.touched"

this.addLockerForm = formbuilder.group({
     registration: [
       "",
       [
         Validators.required,
         Validators.minLength(4),
         Validators.maxLength(8),
         Validators.pattern(Your Pattern)
       ]
     ]  
  }

Если вы используете FormBuilder и валидатор, используйте FormBuilder в вашем файле Ts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...