Search code examples
angularangular-reactive-forms

Angular2 how to know if an input is of type radio with reactive forms


I am building reactive forms form in angular. I have simple radio button with gender name:

this._form = this._formBuilder.group({
            gender: ['', Validators.required]
        });

Template:

            <div class="form-group">
                <h4>What is your gender?</h4>
                <div class="form-group">
                    <label class="custom-control custom-radio">
                        <input value="male" name="gender" type="radio" class="custom-control-input" formControlName="gender">
                        <span class="custom-control-indicator"></span>
                        <span class="custom-control-description">Male</span>
                    </label>
                    <label class="custom-control custom-radio">
                        <input value="female" name="gender" type="radio" class="custom-control-input" formControlName="gender">
                        <span class="custom-control-indicator"></span>
                        <span class="custom-control-description">Female</span>
                    </label>
                    <app-field-error-display [displayError]="formValidationService.IsFieldInvalid(_form,'gender','required')" errorMsg="Field is required"></app-field-error-display>
                </div>
            </div>

I can access the control field by name like this:

public GetControl(form: FormGroup, field: string){
        return form.get(field);
    }

Based on this how do I access the attribute value of type="radio"? I want to know if input control is of type radio.


Solution

  • EDIT: This can't be solved with Reactive forms, but you can with Dynamic forms: https://angular.io/guide/dynamic-form

    The following is a dirty workarround (not recommended):

    Using native JS with not a good practice in Angular, because you lose a lot of Angular features, but if you're just looking for a quick and dirty fix here it is:

    public GetControl(form: FormGroup, field: string){
        let el = document.querySelector('input[name="'+field+'"]');
        if(el.getAttribute('type') == 'radio'){
            // This is a radio input
        }
        return form.get(field);
    }