javascript - Dynamisk formulärkontroll för adress (land, delstat, distrikt och plats)


Jag lägger till dynamisk formulärkontroll vid ändring av rullgardinsmeny, jag kan lägga till men får fel och kan inte heller få värdet i formName.value,

Jag får ett fel

Fel: Det finns ingen FormControl-instans kopplad till formulärkontrollelementet med namn: 'countryName'

Min kod

ngOnInit(): void {
    this.getFormControlsFields(Object.keys(this.countryKey)[0]);
  }

  getFormControlsFields(field: string) {
    const formGroupFields: any = {};
    formGroupFields[field] = new FormControl('');
    this.formFields.indexOf(field) === -1 && this.formFields.push(field);
    this.contactForm = new FormGroup(formGroupFields);
  }
  
  handleChange(value: any, type: string) {
    if (type === 'countryName') {
      this.getFormControlsFields(Object.keys(this.countryKey.states.s1)[0]);
      this.removeFormControls(['districtName', 'placeName']);
      this.fieldValues = {
        ...this.fieldValues,
        stateName: this.getFilteredList(secondLevelArr, value)
      };
    }
  }

Nedan är min HTML-kod

<form [formGroup]="contactForm" (ngSubmit)="onSubmit()">
            <div *ngFor="let field of formFields">
                <mat-form-field *ngIf="field" appearance="fill" class="w-100-per">
                    <mat-label>{{field | titlecase}}</mat-label>
                    <mat-select [formControlName]="field" (selectionChange)="handleChange($event.value, field)">
                        <mat-option *ngFor="let value of fieldValues[field]" [value]="value.id">{{value.name}}</mat-option>
                    </mat-select>
                </mat-form-field>
            </div>
            <button type="submit" mat-raised-button color="primary">Submit</button>
        </form>

Svar #1

Försök lägga till kontroll med "addControl":

this.contactForm.addControl(
  'countryName',
  new FormControl(
    '', // yourFirsState
    Validators.required))

Å andra sidan kan du återfå kontrollen med:

const nameControl = this.contactForm.get('countryName');

eller :

this.contactForm.controls['countryName'].value

Innan du använder if() skriv ut värdet på ditt formulär med:

this.form.controls

Denna kod kommer att ge dig mycket bra information om statusen på ditt formulär