Ionic radio-group with Angular Reactive Forms

时间秒杀一切 提交于 2019-12-11 18:09:30

问题


I'm working on a project in Ionic and need to use reactive forms from Angular 5. I need to allow a user to select a language preference and I'm doing that with radio-group and ion-radio, but when I make changes to the form, I'm getting

ERROR Error: There is no FormControl instance attached to form control element with name: 'preferredLanguage'

Here is my template with the form

<ion-header>
  <ion-navbar>
    <ion-title>User Profile</ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <form *ngIf="user" [formGroup]="profileForm" (ngSubmit)="saveUser()">
      <ion-item>
        <ion-label>Display Name</ion-label>
        <ion-input type="text" formControlName="displayName"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label>First Name</ion-label>
        <ion-input type="text" formControlName="firstName"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label>Last Name</ion-label>
        <ion-input type="text" formControlName="lastName"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label>Email</ion-label>
        <ion-input type="text" formControlName="email"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label>Street</ion-label>
        <ion-input type="text" formControlName="street"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label>City</ion-label>
        <ion-input type="text" formControlName="city"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label>State</ion-label>
        <ion-input type="text" formControlName="state"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label>Zip Code</ion-label>
        <ion-input type="text" formControlName="zip"></ion-input>
      </ion-item>
      <ion-list radio-group formControlName="preferredLanguage">
        <ion-list-header>
          Select Preferred Language
        </ion-list-header>
        <ion-item>
          <ion-label>English</ion-label>
          <ion-radio value="en-US"></ion-radio>
        </ion-item>
        <ion-item>
          <ion-label>Spanish</ion-label>
          <ion-radio value="es-US"></ion-radio>
        </ion-item>
      </ion-list>
    <button type="submit" ion-button>Submit Profile</button>
  </form>
</ion-content>

Here is my method that initializes the form

initProfileForm() {
    this.profileForm = this.formBuilder.group({
      displayName: [this.user.profile.displayName, Validators.required],
      firstName: [this.user.profile.firstName, Validators.required],
      lastName: [this.user.profile.lastName, Validators.required],
      email: [this.user.profile.email, Validators.required],
      street: [this.user.profile.street, Validators.required],
      city: [this.user.profile.city, Validators.required],
      state: [this.user.profile.state, Validators.required],
      zip: [this.user.profile.zip, Validators.required] ,
      preferredLanguage: [this.user.profile.preferredLanguage, 
Validators.required]
    });
  }

Has anyone else had this issue and how did you solve it?


回答1:


I ended up coming up with a solution. This blog helped me come up with an answer: https://robferguson.org/blog/2017/11/19/ionic-3-and-forms/ Apparently, radio-group doesn't work with formControlName so instead I ended up using this:

  <ion-list radio-group [formControl]="profileForm.controls['preferredLanguage']">
    <ion-list-header>
      Select Preferred Language
    </ion-list-header>
    <ion-item>
      <ion-label>English</ion-label>
      <ion-radio value="en-US"></ion-radio>
    </ion-item>
    <ion-item>
      <ion-label>Spanish</ion-label>
      <ion-radio value="es-US"></ion-radio>
    </ion-item>
  </ion-list>

This fixed the issue so there is no longer an error.




回答2:


Make some amendments in your HTML code:

    <ion-item>
      <ion-label>English</ion-label>
      <ion-radio value="en-US" formControlName="preferredLanguage"></ion-radio>
    </ion-item>
    <ion-item>
      <ion-label>Spanish</ion-label>
      <ion-radio value="es-US" formControlName="preferredLanguage"></ion-radio>
    </ion-item>

So basically instead of using it on parent use it individually for each radio button. This worked for me.

Hope it helps!



来源:https://stackoverflow.com/questions/47948838/ionic-radio-group-with-angular-reactive-forms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!