/angular-guide > _

ჩაშენებული ვალიდატორები

ჯერ განვიხილოთ ანგულარში არსებული ვალიდატორები. ჩვენი პროექტი ასე გამოიყურება: გვაქვს შექმნილი SignupFormComponent, სადაც გვაქვს მარტივი კონტროლების ჯგუფი, რომელიც დაკავშირებულია თემფლეითთან.

import { Component } from "@angular/core";
import { CommonModule } from "@angular/common";
import { ReactiveFormsModule, FormBuilder } from "@angular/forms";

@Component({
  selector: "app-signup-form",
  standalone: true,
  imports: [CommonModule, ReactiveFormsModule],
  templateUrl: "./signup-form.component.html",
  styleUrls: "./signup-form.component.css",
})
export class SignupFormComponent {
  signupForm = this.fb.group({
    name: [""],
    email: [""],
    password: [""],
  });

  constructor(private fb: FormBuilder) {}

  onSubmit() {
    console.log(this.signupForm.value);
  }
}
<form [formGroup]="signupForm" (ngSubmit)="onSubmit()">
  <div class="form-block">
    <label for="name">Name</label>
    <input type="text" id="name" formControlName="name" />
  </div>
  <div class="form-block">
    <label for="email">Email</label>
    <input type="email" id="email" formControlName="email" />
  </div>
  <div class="form-block">
    <label for="password">Password</label>
    <input type="password" id="password" formControlName="password" />
  </div>
  <button type="submit">Submit</button>
</form>
<div>
  <h3>Result:</h3>
  <div>{{ signupForm.value | json }}</div>
</div>

ვალიდატორებს ჩვენ ფორმის კონტროლის შექმნისას ვარეგისტრირებთ. ვაიმპორტებთ Validators კლასს, და აქედან ვარჩევთ სასურველ ვალიდატორს:

signupForm = this.fb.group({
  name: ["", Validators.required],
  email: ["", [Validators.required, Validators.email]],
  password: ["", Validators.required],
});

მასივში პირველი ელემენტის შემდეგ შეგვიძლია ვალიდატორის დამატება. აქვე გზად email კონტროლს email ვალიდატორიც მივცეთ. თუ ვალიდატორი ერთზე მეტია, ისინი ცალკე მასივში უნდა მოთავსდნენ. ახლა, ყოველ ცვლილებაზე კონტროლებში, ანგულარი ამ ვალიდატორებით შეამოწმებს კონტროლების ვალიდურობას და მთლიან ჯგუფს მიანიჭებს valid და invalid თვისებებზე რაიმე ბულიან მნიშვნელობას. required ვალიდატორი საჭიროებს რომ ველი არ იყოს ცარიელი. იმეილის ვალიდატორი საჭიროებს იმეილის პატერნს.

საპასუხოდ შეგვიძლია ღილაკი ჩავაქროთ disabled თვისებაზე ბაინდინგით, თუკი მთლიანი ჯგუფი არის invalid. თუ ერთი კონტროლი მაინც არ არის ვალიდური, მთლიანი ჯგუფიც არავალიდურია.

<button type="submit" [disabled]="signupForm.invalid">Submit</button>

არის უფრო ზოგადი ხასიათის ვალიდატორიც, სახელად pattern. მასში მივუთითოთ ის სასურველი პატერნი, რომელსაც მომხმარებლის შეყვანილი ინფორმაცია უნდა ექვემდებარებოდეს. მასში შეგვიძლია სტრინგის მიწოდება, და შედეგად შეყვანილი ინფორმაცია უნდა შეიცავდეს ამ სტრინგს. ასევე შეგვიძლია ამ ვალიდატორში რეგექსის გამოყენება.

signupForm = this.fb.group({
  name: ["", [Validators.required, Validators.pattern(/^[A-z]/)]],
  email: ["", [Validators.required, Validators.email]],
  password: ["", Validators.required],
  confirmPassword: ["", Validators.required],
});

სახელს ვაძლევთ ვალიდატორს, სადაც მხოლოდ ისეთ ტექსტს დავუშვებთ, რომელიც არ იწყება რიცხვით ან სხვა განსაკუთრებული სიმბოლოთი, გარდა უბრალო ასოებისა.

ასევე არსებობს minLength/maxLength ვალიდატორებიც, რომლებიც სტრინგის მინიმალურ და მაქსიმალურ ზომას გულისხმობენ.

name: ["", [Validators.required, Validators.pattern(/^[A-z]/), Validators.minLength(2)]],

აქ მივუთითებთ, რომ სახელი ორ ასოზე მოკლე არ უნდა იყოს.

errors თვისება

ვალიდაციის ერორის არსებობის შემთხვევაში თითოეული ვალიდატორი უნიკალურ თვისებას ამატებს კონტროლის ინსტანციის errors თვისებაზე. მაგალითად, Validators.minLength ვალიდატორს, არავალიდურობის შემთხვევაში, შეუძლია კონტროლს მიანიჭოს controls.errors.minLength თვისებაზე ობიექტი. ვალიდატორის სახელი ემთხვევა ერორის თვისების სახელს. ობიექტის თვისებები დამოკიდებულია თვითონ ვალიდატორზე, ამიტომ უშუალოდ ამ ვალიდატორის დოკუმენტაციას ან იმპლემენტაციას უნდა ჩახედოთ.