קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
ראשי ♦ אנגולר ♦ custom validator for groups – אנגולר ולידטור ייחודי לגרופ ב-reactive form

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

וינר יאיר 29 באוקטובר 2020 אין תגובות

אחד הדברים ששימושיים בטפסים הוא נושא הוולידציות . באנגולר השקיעו הרבה מחשבה בטפסים ובוולידציות בפרט . אז היה טיפ שיעזור לכם להגדיר בטופס מסוג reactive form . וולידטור חדש ייחודי (ולא מובנה), לקבוצה של controllers. בדוגמה ניקח 3 צקבוקסים ונגדיר שלפחות אחד מהם צריך להיות מסומן.

צעד ראשון – להגדיר את השדות בHTML

אז להלן טופס פשוט שיש בו 4 צקבוקסים. אפשר לראות כי יש formControlName בכל אחד מהשדות כיעה ל angular reactive form . וכמובן לא לשכוח לציין את ה formGroup המתאים בתגית ה form

<form [formGroup]="checkboxesGroup" (ngSubmit)="submit(checkboxesGroup)">
  <label>איזו חיית מחמד יש לך?</label>
 <div class="form-group">
 <div class="input-group">
   <input type="checkbox" formControlName="iHaveADog" name="Dog" /> 
   <label>כלב</label>
 </div>
 <div class="input-group">
   <input type="checkbox" formControlName="iHaveACat" name="Cat" /> 
   <label>חתול</label>
</div>
<div class="input-group">
  <input type="checkbox" formControlName="iHaveAFish" name="Fish" /> 
  <label>דג</label>
</div>
<div class="input-group">
  <input type="checkbox" formControlName="iHaveAOther" name="iHaveAOther" />
  <label>אחר</label>
</div>
 </div>
 <button type="submit" [disabled]="!checkboxesGroup.valid">שלח טופס</button>
</form>


צעד שני- להגדיר את השדות ב-reactive form שלכם.

פה אפשר לראות הגדרה של ה formGroup בעזרת formBuilder , אפשר כמובן ליצוק את זה השדות ישירות על ידי new FormGroup ואז להזין את הקונטרולרים. לשם הגוון בחרתי להציג כך:

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { CustomValidators } from '../validators/at-least-one-checkbox';


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
  
  public title = 'reactive-form';

  private exampleForm: FormGroup;
  public checkboxesGroup: any;
  
  constructor(private fb: FormBuilder){
    
    this.exampleForm = this.fb.group({
      checkBoxes : this.fb.group({
        iHaveADog : this.fb.control(false),
        iHaveACat : this.fb.control(false),
        iHaveAFish : this.fb.control(false),
        iHaveAOther : this.fb.control(false)
      })
    });
    
    this.checkboxesGroup = this.exampleForm.get('checkBoxes');
  } 
  
  ngOnInit() :void {}

  submit(form: FormGroup) :void{
    if(form.valid) {
      console.log(form.value)
    }
  }
}

צעד שלישי – בונים את הפונקציה של הוולידציה.

אוקי אז הנה החלק המעניין. אני מעדיף גם לפתוח קובץ חדש ולשים בתיקיה שיצרתם במיוחד בשביל הוולידטורים שלכם. למשל אפשר לפתוח תיקיה חדשה מקבילה ל assets בשם validators ושמה לפתוח קובץ חדש בשם של הוולידטור שלכם.

import {AbstractControl, FormGroup} from '@angular/forms';

export class CustomValidators {
    
    static atListOneCheckbox(group: FormGroup) : {[key: string]:any} | null {
     
        const validCheckOne : AbstractControl = group.get('iHaveADog');
        const validCheckTwo : AbstractControl = group.get('iHaveACat');
        const validCheckThree : AbstractControl = group.get('iHaveAFish');
        const validCheckFour : AbstractControl = group.get('iHaveAOther');

        if (validCheckOne.value || validCheckTwo.value || validCheckThree.value || validCheckFour.value) {
            return null;
        }else {
            return {'invalid': true}
        }
    }
}

צעד רביעי ואחרון – מוסיפים את הוולידטור החדש אל הקבוצה של הצק בוקסים

ועכשיו הקסם קורה! פשוט מגדירים ל form group וולידציה על ידי שימוש ב setValidators . אפשר כמובן להעביר ולידטור אחד או כמה בתוך מערך .

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { CustomValidators } from '../validators/at-least-one-checkbox';


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
  
  public title = 'reactive-form';

  private exampleForm: FormGroup;
  public checkboxesGroup: any;
  
  constructor(private fb: FormBuilder){
    
    this.exampleForm = this.fb.group({
      checkBoxes : this.fb.group({
        iHaveADog : this.fb.control(false),
        iHaveACat : this.fb.control(false),
        iHaveAFish : this.fb.control(false),
        iHaveAOther : this.fb.control(false)
      })
    });
    
    this.checkboxesGroup = this.exampleForm.get('checkBoxes');
    //  ****** הוספנו את זה *******
    this.checkboxesGroup.setValidators(CustomValidators.atListOneCheckbox);
    // *****
  } 
  
  ngOnInit() :void {}

  submit(form: FormGroup) :void{
    if(form.valid) {
      console.log(form.value)
    }
  }
}

מקווה שנהנתם :). בהצלחה.

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

מדריך אנגולגר טופס ריאקטיבי שיעור תשיעי ואחרוןמדריך אנגולר | סיכום מיני קורס אנגולר reactive forms מדריך-אנגולגר-טופס-ריאקטיבי-שיעור-חמישימדריך אנגולר | reactive forms – חיבור הטופס הריאקטיבי לתצוגת הטופס מדריך-אנגולר-reactive formאיך יוצרים טופס פשוט – אנגולר וטפסים מגיבים | Reactive Forms מדריך אנגולגר טופס ריאקטיבי שיעור 2מדריך אנגולר | reactive forms – היכרות בסיסית עם AbstractControl
angular html reactive form אנגולר וילידציות טופס מאובטח בHTML

אודות המחבר

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


פוסט הבא »

השארת תגובה

ביטול

חיפוש באתר
בחירת העורכים
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 אנגולר בלוקציין בניית אתרים וורדפרס חיפוש עבודה כלים נוספים כללי נגישות קורסים ריאקט תלת מימד תקלות ופתרונות
צור קשר
כל הזכויות שמורות לקודקודייל
ליצירת קשר: @ קודקודייל
גלילה לראש העמוד