קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
ראשי ♦ אנגולר ♦ מדריך אנגולר | reactive forms – ולידציות בהתאמה אישית

מדריך אנגולר | reactive forms – ולידציות בהתאמה אישית

וינר יאיר 28 בינואר 2021 אין תגובות

אז אחרי שהבנתם מהם ולידציות ואיך נראים ולידציות מובנות. בטח חשבתם לעצמכם, או אפילו כבר נתקלתם בכך שלא קיימת ולידציה מובנית למקרה שלכם ושאלתם את עצמכם: "איך אני יוצר ולידציוה משל עצמי?"

אז מזל ששאלתם! בשביל זה בדיוק נועד הפרק הזה במדריך אנגולר שלנו.

הנושאים עליהם נעבור בפרק זה:

  1. ValidatorFn 
  2. איפה לשמור ואיך לקרוא לולידציות שבניתם
  3. שימוש דינאמי
  4. סיכום

אציג את הדוגמה של הולידציה בהתאמה אישית שיש לנו בדוגמה

אז הנה כל הקובץ ה typescript של קומפוננטת הטופס שלנו בדוגמה הזו
אפשר לראות בשורה 33 כי מוגדרת אובייקט עם הולידציה שחלה על formGroup של שדות המייל שבודק כי אחד המיילים שווים בשתי הפקדים.

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { customValidatorsForJobForm } from 'src/validators/customValidatorsForJobForm';

@Component({
  selector: 'app-form-example',
  templateUrl: './form-example.component.html',
  styleUrls: ['./form-example.component.scss']
})
export class FormExampleComponent implements OnInit {
  
  public showPrefix : boolean;
  
  
  public prefixList: string[] = ['050','052','053','054','055','056','057'];
  
  public dontHaveJobYet: boolean;
 
  public jobRegistrationForm : FormGroup;

  constructor(private fb: FormBuilder) { }

  ngOnInit(): void {
    this.jobRegistrationForm = this.fb.group({
      fullName: this.fb.control('',[Validators.required , Validators.pattern(/[a-zA-Z]+\s+[a-zA-Z]/)]),
      phoneForm: this.fb.group({
        number: ['',[Validators.required , Validators.pattern('[0-9]{7,20}')]],
        prefix: ['',Validators.required]
      }),
      emailForm : this.fb.group({
        email: ['',[Validators.required, Validators.email]],
        reEmail: ['',[Validators.required, Validators.email]]
      },{validators: [customValidatorsForJobForm.emailVerified()]}),
      jobStatus: ['',Validators.required],
      termsApproved : ['',Validators.required]

    });
  }
  displayPrefixlist(): void {
    this.showPrefix = !this.showPrefix;
  }
  choosenPrefix(choosen: string): void {
    this.showPrefix = false;
    this.jobRegistrationForm.get('phoneForm').get('prefix').setValue(choosen);
  }

  checkJobStatus(): void{
    
    this.dontHaveJobYet =  !this.jobRegistrationForm.controls.jobStatus.value;

    if (this.dontHaveJobYet){
      this.jobRegistrationForm.addControl('lastDayJob', this.fb.control('', [Validators.required])); 
    }else {
      this.jobRegistrationForm.removeControl('lastDayJob'); 
    }
  }
  submit(form: any) { 
    console.log(form.value);
  }
}

להלן הקובץ של הולידציה בהתאמה אישית, אפשר לראות שכאן מוגדר קלאס שמכיל בתוכו את הולידציה ככה אני יכול לבנות כמה ולידציות באותו קלאס ואז לקרוא להם כמו למשל בדוגמה למעלה בשורה 33 , customValidatorsForJobForm.emailVerified.

אפשר לראות שיש כאן תנאי פשוט מאד שמשווה בין השדות. ובמידה ואין התאמה הפונקציה מחזירה אובייקט עם key לבחירתנו שערכו boolean

import { group } from "@angular/animations";
import { FormControl, FormGroup, ValidatorFn } from "@angular/forms";

export class customValidatorsForJobForm {
    static emailVerified() : ValidatorFn {
        return (group: FormGroup)=>{
            if(group.controls.email.value !== group.controls.reEmail.value) {
                return {emailsAreSame : true}
            }else {
                return null;
            }
        };
    }

}

1. מה זה ValidatorFn 

זהו TYPE שמשתמשים בו להגדיר את מה תחזיר הפונקציה של הולידציה, שזה כמובן ValidatorFn  .
אפשר לראות כאן, כי האינטרפייס שמגדיר את ValidatorFn . הפונקציה תחזיר null כל עוד הכל תקין בטופס שלכם. אחרת תחזיר אובייקט עם ה key מתאים שיגדיר את השגיאה (את הkey המיוחל אנחנו מגדירים כמובן)

interface ValidatorFn {
  (control: AbstractControl): ValidationErrors | null
}

2. איפה לשמור ואיך לקרוא לולידציות שבניתם

אפשר לשמור את הולידציות שלכם בכל מקום בתכלס אבל מומלץ שיהיה סדר בקבצים של הפרוקט שלכם. אני מציע ליצור תיקיה בתיקיה הראשית app ולקרוא לה validators למשל. שמה תוכלו לשים את כל הווליקציות שלכם. עוד הייתי מציע לבנות קובץ פר טופס עם class ובתוכו להגדיר את הולידציות בהתאמה אישית הקשורות לטופס זה. ברגע שתרצו להשתמש בולידציה בדומה לדוגמה שלנו.

3. שימוש דינאמי בולידטורים שלכם

כפי שראיתם בדוגמה שלי, הולידציה לא כלכך דינאמית , כי מוגדרים שמה שדות קבועים כמו reEmail.
אפשר להגדיר את השדות כך שתעבירו דרך . כל מה שצריך לעשות זה להעביר דרך הפונקציה (שורה 33) את הפרמטרים שתרצו להעביר. למשל : **כמובן להגדיר פרמטרים בפונקציה המקבלת.

customValidatorsForJobForm.emailVerified(’email','reEmail')

סיכום

עולם הולידציות הוא נושא חשוב מאד ויש לו משקל רב בעולם הפיתוח . כמו כן יש הרבה מפתחים שסובלים מזה ולא הכי אוהבים להתעסק עם הדברים הללו כי זה לרוב מלווה בהרבה בדיקות ונסיונות. אבל! זה אולי אחד הדברים הכי מלמדים. וכתנינים שרוצים לכתוב קוד איכותי, אני מציע להתחיל להתנסות ולכתוב ולידציות ותראו שבסוף זה דווקא אתגר מאד מהנה. בהצלחה! 🐱‍🐉

עוד פוסט בנושא : מדריך אנגולר | reactive forms – ולידציות בהתאמה אישית

custom validator for groups – אנגולר ולידטור ייחודי לגרופ ב-reactive form

פוסטים קשורים:

מדריך אנגולגר טופס ריאקטיבי שיעור 6מדריך אנגולר | reactive forms – הוספת ולידציות מובנות מדריך אנגולגר טופס ריאקטיבי שיעור שמינימדריך אנגולר | reactive forms – ולידציות וחיווי בUI מדריך אנגולגר טופס ריאקטיבי שיעור תשיעי ואחרוןמדריך אנגולר | סיכום מיני קורס אנגולר reactive forms מדריך , קורס באנגולגר טופס ריאקטיבי שיעור 3מדריך אנגולר | reactive forms – בסיס לבניית הטופס המגיב.
אנגולר לימודי אנגולר מדריך אנגולר קורס אנגולר

אודות המחבר

יאיר וינר להציג את כל הפוסטים של וינר יאיר


« פוסט קודם
פוסט הבא »

השארת תגובה

ביטול

חיפוש באתר
בחירת העורכים
29 בדצמבר 2023 עידן יצחקי

שדה טקסט עשיר עם תמונות

אתם הולכים להיות מופתעים עד כמה HTML יכול להיות חכם ולבצע משהו כל כך מורכב, שאם אנחנו היינו רוצים ליצור

1 באוקטובר 2021 עידן יצחקי

איך למשוך דינמית favicon של אתרים אחרים ב-JS

בפוסט זה נראה איך אפשר על פי לינקים בדף למשוך את ה-favicon מהדומיין שלהם באופן דינמי, בדיקה של תקינות התמונה

פופולרי
Javascript functions – היכרות עם סוגי פונקציות
Javascript
21 בדצמבר 2024 אין תגובות
Nested routing in angular standalone component
Typescript
15 בנובמבר 2024 תגובה אחת
בחרו לפי תגיות
angular blockchain css ethers express front-end fullstack GQL html javascript next js nextjs nodejs react hooks reactjs solidity webgl אנגולר בלוקציין וורדפרס לימודי אנגולר לימודי וורדפרס לימוד ריאקט מדריך front-end מדריך GQL מדריך אנגולר מדריך וורדפרס מדריך חינם react מדריך ריאקט מפתח בלוק מפתח בלוקציין מתכנת front-end מתכנת בלוקציין מתכנת פרונט סולידיטי קורס front end קורס fullstack קורס nextjs קורס אנגולר קורס בלוקציין קורס בלוקציין בחינם קורס סולידיטי קורס ריאקט קורס תכנות קורס תכנות בחינם
סינון על פי קטגוריות
CSS fullstack HTML IIS Javascript nodeJs SEO Typescript אנגולר בלוקציין בניית אתרים וורדפרס חיפוש עבודה כלים נוספים כללי נגישות קורסים ריאקט תלת מימד תקלות ופתרונות
צור קשר
כל הזכויות שמורות לקודקודייל
ליצירת קשר: @ קודקודייל
גלילה לראש העמוד
דילוג לתוכן
פתח סרגל נגישות כלי נגישות

כלי נגישות

  • הגדל טקסטהגדל טקסט
  • הקטן טקסטהקטן טקסט
  • גווני אפורגווני אפור
  • ניגודיות גבוההניגודיות גבוהה
  • ניגודיות הפוכהניגודיות הפוכה
  • רקע בהיררקע בהיר
  • הדגשת קישוריםהדגשת קישורים
  • פונט קריאפונט קריא
  • איפוס איפוס