Angular 2: Apply Validator.required validation on some condition

前端 未结 4 642
轮回少年
轮回少年 2020-12-16 05:09

I have a angular 2 form wherein I have to make a field required on some condition like:

description:  [\'\', Validators.required]

This desc

相关标签:
4条回答
  • 2020-12-16 05:39

    You can simply use Validators.requiredTrue

    description: [false, Validators.requiredTrue]

    0 讨论(0)
  • 2020-12-16 05:49

    You should set the validator on the field imperatively vs declaratively.

    Declaratively (your current code):

    const description = new FormControl('', Validators.required);
    

    Imperatively:

    const description = new FormControl('');
    if (someCondition) {
      description.setValidators(Validators.required);
    }
    
    0 讨论(0)
  • 2020-12-16 05:51

    If descReq needs to be evaluated at run-time (rather than when its initialized), then perhaps you should create a custom validator:

    import { ValidatorFn, AbstractControl } from '@angular/forms';
    interface ValidationResult {
        [key:string]:boolean;
    }
    function customValidator(condition: { required:boolean }) {
         return (control: AbstractControl) :ValidationResult  => {
             return condition.required && 
                 (control.value == undefined || 
                  control.value == null || 
                  control.value.trim() =='') ? 
                  {
                     'required': true
                  }: null;
    
           }
    
    }
    

    Use like this:

    description:  ['', customValidator(this.reqd)]
    

    where reqd has been initialized earlier, and maybe even data-bound:

    reqd = { required: false };
    
    0 讨论(0)
  • 2020-12-16 06:03

    You can add or remove a validator based on the the value of another control on the form:

        testForm: FormGroup;
    
        constructor(private formBuilder: FormBuilder) {
          this.testForm = this.formBuilder.group({
            condition: [''],
            description: ['']
          });
    
          this.testForm.controls['condition'].valueChanges.subscribe(result => {
            if (result) {
              this.testForm.controls['description'].setValidators(Validators.required);
              this.testForm.controls['description'].updateValueAndValidity();
            } else {
              this.testForm.controls['description'].setValidators(null);
              this.testForm.controls['description'].updateValueAndValidity();
            }
          });
        }
    
    0 讨论(0)
提交回复
热议问题