Как отображать различные сообщения об ошибках на основе пользовательского ввода в Angular 6 - PullRequest
0 голосов
/ 19 сентября 2018

Я новичок в angular 6, здесь я хочу проверить поле ввода пользователя и отобразить различные сообщения об ошибках на основе заданного ввода.

В моем проекте я использую дизайн углового материала для пользовательского интерфейса.

То, что я хочу сделать, это

  • Если пользователь нажимает кнопку сохранения, отображается сообщение об ошибке как «Пожалуйста, введите свой FName».
  • Если пользователь коснулся, но ничего не вводил и нажал кнопку «Сохранить», отобразится сообщение об ошибке: «Пожалуйста, введите свой FName».
  • Если пользователь начал вводить символ, он должен отобразить сообщение об ошибке как «требуется минимум 4 символа»
  • Как только пользователь достиг 15 символов, он должен отобразить сообщение об ошибке в виде «Максимум 20 символов только»
  • Еслипользователь вводит любой специальный символ и пробел, а другой вводит сообщение об ошибке как «Ввод только алфавитов»

Теперь он меняется на КРАСНЫЙ цвет, когда ввод не соответствует успешной проверке.но я хочу отобразить сообщение об ошибке дляr каждая проверка в форме Control.

Здесь у меня есть поле ввода mat.

<form [formGroup]="userAddressValidations" novalidate>
    <mat-form-field appearance="outline" class="col-sm-6">
        <mat-label>First Name</mat-label>
        <input matInput formControlName="firstName">
    </mat-form-field>
</form>

<button mat-raised-button class="continueBtnHeight" color="warn">
<span>Save</span>
</button>

Ts файл

export class ButtonToggleOverviewExample {
  userAddressValidations: FormGroup;
  constructor(private formBuilder: FormBuilder) { }
  ngOnInit() {
    this.userAddressValidations = this.formBuilder.group({
      firstName: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(20), Validators.pattern('[a-zA-Z]+')]]
    });

  }
}

stackblitz: https://stackblitz.com/edit/angular-t1k1x6-skowwq?file=app%2Fbutton-toggle-overview-example.ts

Может кто-нибудь помочь мне решить эту проблему.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Попробуйте:

<form class="example-form" [formGroup]="userAddressValidations">
  <mat-form-field class="example-full-width">
    <input matInput placeholder="First Name" formControlName="firstName">
    <mat-error *ngIf="userAddressValidations.get('firstName').hasError('required')">
      First Name is Required!
    </mat-error>
    <mat-error *ngIf="userAddressValidations.get('firstName').hasError('minlength')">
      First Name should be atleast 4 characters long!
    </mat-error>

    <mat-error *ngIf="userAddressValidations.get('firstName').hasError('maxlength')">
      First Name can be atmax n characters long!
    </mat-error>

    <mat-error *ngIf="userAddressValidations.get('firstName').hasError('pattern')">
      First Name must follow this pattern!
    </mat-error>
  </mat-form-field>

</form>

Вот вам Образец StackBlitz для вашей ссылки.

0 голосов
/ 19 сентября 2018

используйте hasError('invalidName'), если пользователь вводит любой специальный символ и пробел

Stackblitz

Component.html

<form [formGroup]="userAddressValidations">

    <label>User Name : 
        <input type="text"  formControlName="firstName">
    </label><br>

    <div class="errors" *ngIf="userAddressValidations.get('firstName').invalid && (userAddressValidations.get('firstName').touched || userAddressValidations.get('firstName').dirty)">

        <div *ngIf="userAddressValidations.get('firstName').hasError('required')">
            Please enter your FName
        </div>

        <div *ngIf="userAddressValidations.get('firstName').errors.minlength">
            minimum 4 char required
        </div>

        <div *ngIf="userAddressValidations.get('firstName').errors.maxlength">
            Maximum 20 char only
        </div>

        <div class="error-text" *ngIf="userAddressValidations.get('firstName').hasError('invalidName')">
            Enter only alphabets
        </div>
    </div>

</form>

Component.ts

this.userAddressValidations = fb.group({
      firstName: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(20), usernameValidator]]
});

username.validators.ts

import { AbstractControl, ValidationErrors } from "@angular/forms"

export const usernameValidator = function (control: AbstractControl): ValidationErrors | null {

  let value: string = control.value || '';

  if (value) {
    const matches = value.match(/^[a-zA-Z]+$/);
    return matches ? null : { 'invalidName': true };
  } else {
    return null;
  }
}
0 голосов
/ 19 сентября 2018

Посмотрите этот учебник https://codecraft.tv/courses/angular/forms/model-driven-validation, Вы также можете сослаться на этот вопрос stackoverflow: Показать пользовательскую ошибку валидатора с ошибкой mat

Но вот небольшой пример:

<form [formGroup]="userAddressValidations" novalidate>
    <mat-form-field appearance="outline" class="col-sm-6">
        <mat-label>First Name</mat-label>
        <input matInput formControlName="firstName">
         <mat-error *ngIf="email.errors.required">{{getErrorMessage()}}</mat-error>
         <mat-error *ngIf="email.errors.minlength">{{getErrorMessage()}}</mat-error>
    </mat-form-field>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...