मेरे पास एक फॉर्मग्रुप है जिसे फ्रूट क्रिएट किया गया है

 fruits: FormGroup = formBuilder.group({      
      numberOfFruits: [0,Validators.min(0)],
      apple: false,
      mangoes: false
    });

और एचटीएमएल इस प्रकार है:

<div formGroupName="fruits">
    <div>
        <p>Key in the number of fruits you want to select</p>
    </div>
    <div>
        <input readonly matInput formControlName="numberOfFruits" type="number">
    </div>
    <mat-checkbox formControlName="apple">Apple</mat-checkbox>
    <mat-checkbox formControlName="mangoes">Mangoes</mat-checkbox>
</div>

मैं निम्नानुसार सत्यापन करना चाहता हूं:

  1. यदि फलों की संख्या 0 चुनी गई है तो किसी भी (सेब/आम) चेकबॉक्स के चयन की अनुमति न दें।
  2. यदि फलों की संख्या के लिए 1 चुना जाता है तो केवल/कम से कम एक चेकबॉक्स का चयन करने की अनुमति दें (या तो सेब/आम)
  3. यदि फलों की कुल संख्या के लिए 2 या अधिक का चयन किया जाता है, तो कम से कम 1 चेकबॉक्स (सेब/आम/दोनों) का चयन किया जाना चाहिए।

मैंने व्यक्तिगत शर्तों को निम्नानुसार लिखकर समूह fruits के लिए एक सत्यापन बनाया है:

if (group.controls['numberOfFruits'].value === 1 || (group.controls['numberOfFruits'].value == 2 &&
        group.controls['apple'].value === true)) {
    group.controls['mangoes'].patchValue(false);
}
if (group.controls['numberOfFruits '].value == 1 || (group.controls['numberOfFruits'].value == 2 && group.controls['mangoes'].value === true)) {
    group.controls['apple'].patchValue(false);
}

क्या इसे हासिल करने का कोई बेहतर और प्रभावी तरीका है?

0
Jinxed 7 अप्रैल 2020, 20:45

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि group.valueChanges की सदस्यता लेना बेहतर है (याद रखें कि आपको फॉर्मग्रुप बनाने के बाद सदस्यता लेने की आवश्यकता है)। कुछ ऐसा हैं

group.valuesChange.subscribe(res=>{
   if (res.numberOfFuits>=1)
   {
      ..enable apple and mangos..
      if (res.numberOfFuits==1)
      {
         if apple, mangos=false; //<--remember {emitEvent:false}
         if mangos, apple=false
      }
   }
   else
   {
      disable apple and mangos and set value to false;
   }
})

और जब नंबरऑफफ्रूट्स> 2 . को नियंत्रित करने के लिए आपको एक कस्टम फॉर्म वैलिडेशन बनाने की आवश्यकता होती है

0
Eliseo 7 अप्रैल 2020, 19:40