Get validators present in FormGroup/FormControl

前端 未结 5 1781
感动是毒
感动是毒 2020-12-10 11:03

I\'m using Material 2 in my app, but in this question I want to solve a problem specifically with Input.

As you can see in API Reference there\'s a

5条回答
  •  天命终不由人
    2020-12-10 11:17

    This answer is a continuation of @joh04667's. They wrote:

    public hasValidator(control: string, validator: string): boolean {
      return !!this.myForm.controls[control].validators(control).hasOwnProperty(validator);
     // returns true if control has the validator
    }
    

    However there is no AbstractControls.validators() method. I'm assuming AbstractControls.validator() was meant.

    The hasValidator() method only works for validators that 'fail' (eg. a required validator on a control with the value '' (empty)). Since if they pass they return null. A way around this would be to set the value so that it always fails and restore that afterwards.

    public hasValidator(control: string, validator: string): boolean {
        let control: AbstractControl = this.myForm.controls[control];
        let lastValue: any = control.value;
        switch(validator) {
            case 'required':
                control.setValue('');  // as is appropriate for the control
            case 'pattern':
                control.setValue('3'); // given you have knowledge of what the pattern is - say its '\d\d\d'
            ....
        }
        let hasValidator: boolean = !!control.validator(control).hasOwnProperty(validator);
    
        control.setValue(lastValue);
        return hasValidator;
    }
    

    And this is pretty horrible. It begs the question - Why is there no AbstractControl.getValidators(): ValidatorFn[]|null?

    What is the motivation in hiding this? Perhaps they are worried someone might put in their code:

    ...
    secretPassword: ['', [Validators.pattern('fjdfjafj734738&UERUEIOJDFDJj')]
    ...
    

提交回复
热议问题