How can I use a ngModel on an ion-radio element?

Viewed 22356

I'm trying to implement a ngModel on a ion-radio element but somehow it doesn't work. This is my code:

import {
  Page
} from 'ionic-angular';

@Page({
  templateUrl: 'build/pages/settings/settings.html'
})

export class Settings {
  constructor() {
    this.unit = 2;
  }
}
<ion-list radio-group>
  <ion-list-header>
    Unit
  </ion-list-header>

  <ion-item>
    <ion-label>Metric (kg)</ion-label>
    <ion-radio value="1" [(ngModel)]="unit"></ion-radio>
  </ion-item>

  <ion-item>
    <ion-label>Imperial (lbs)</ion-label>
    <ion-radio value="2" [(ngModel)]="unit"></ion-radio>
  </ion-item>
</ion-list>

I've tried implementing it on a ion-input and ion-select and that just works fine. I also tried adding directives: [FORM_DIRECTIVES] to my @Page and added the corresponding import but that doesn't fix the problem.

Any ideas?

7 Answers

It's working with Ionic 5.

  <ion-radio-group value="answer">
       <ion-item *ngFor="let item of question?.answers">
           <ion-label> {{item.answer}} {{answer}}</ion-label>
           <ion-radio slot="start" color="tertiary" value="{{item.id}} 
                 (ionBlur)="saveAnswer(item.id)">
             </ion-radio>
        </ion-item>
   </ion-radio-group>

As of Ionic 4+, the correct sintax is:

<ion-list>
<ion-radio-group [(ngModel)]="unit"> 
  <ion-list-header>
    Unit
  </ion-list-header>
    <ion-item>
      <ion-label>Metric (kg)</ion-label>
      <ion-radio value="1"></ion-radio>
    </ion-item>

    <ion-item>
      <ion-label>Imperial (lbs)</ion-label>
      <ion-radio value="2"></ion-radio>
    </ion-item>
  </ion-radio-group>
</ion-list>

You have to update below code too in Ionic 5.

this.unit = 2;  

to

this.unit = '2';  

In a word, you can't use integer variable as ion-radio value.

If you are going to use integer type of unit, please reference follow code.

this.options = [
  {
    label: 'Metric (kg)',
    value: 1
  },
  {
    label: 'Imperial (lbs)',
    value: 2
  }
];

in .html code

<ion-radio-group [(ngModel)]="unit">
  <ion-list-header>
    <ion-label>
      Unit
    </ion-label>
  </ion-list-header>
  <ion-item *ngFor="let opt of options">
    <ion-label>{{opt.label}}</ion-label>
    <ion-radio [value]="opt.value" slot="start"></ion-radio>
  </ion-item>
</ion-radio-group>

This is what works for ionic 5..tested and working fine

 <ion-list>
        <ion-radio-group  >
          <ion-list-header>
            <ion-label>{{'Drivers' | translate}}</ion-label>
          </ion-list-header>
          <ion-item *ngFor="let item of drivers" lines="none" (ionChange)="checkValue(item)">
            <ion-avatar slot="start">
              <img [src]="item.coverImage" />
            </ion-avatar>
            <ion-label>{{item.fullname}} <br>
              <p>{{'Distance' | translate}} : {{item.distance}}Km</p>
            </ion-label>
            <ion-radio [value]="item.id"></ion-radio>
          </ion-item>
        </ion-radio-group>
      </ion-list>

Then in your controller u can pick it like this

checkValue(value){

console.log("returned", value);

}

This is working for me

 postData={
"gender":''

}

   <ion-list>
  <ion-radio-group value="Male" >
    <ion-list-header>
      <ion-label style="font-size:10px;">Gender</ion-label>
    </ion-list-header>
    
    <ion-item>
      <ion-label>Male</ion-label>
      <ion-radio slot="start" value="Male" (ionBlur)="postData.gender='Male'"></ion-radio>
    </ion-item>

    <ion-item>
      <ion-label>Female</ion-label>
      <ion-radio slot="start" value="Female" (ionBlur)="postData.gender='Female'"></ion-radio>
    </ion-item>

  </ion-radio-group>
</ion-list>

This worked for me on Ionic 5

<ion-radio-group name="iconSelect" ngDefaultControl [(ngModel)]="playerIcon" (ionChange)="setIcon()">
    <ion-list-header>           

    </ion-list-header>

  <ion-item>
    <ion-label>
        <ion-icon name="radio-button-off"></ion-icon>
        Circle
        </ion-label>

    <ion-radio value="1" ></ion-radio>
  </ion-item>
  <ion-item>
    <ion-label>
        <ion-icon name="square-outline"></ion-icon>
        Square
    </ion-label>
    <ion-radio value="2"></ion-radio>
  </ion-item>
  <ion-item>
    <ion-label>
        <ion-icon name="play"></ion-icon>
        Triangle
    </ion-label>
    <ion-radio value="3" ></ion-radio>
  </ion-item>
</ion-radio-group>
Related