Mohan Gopi
Mohan Gopi

Reputation: 7724

How to get the value from ion-select option

I have an array of object called options.

this is my html code

    <ion-item>
        <ion-label>place</ion-label>

        <ion-select [(ngModel)]="place" (click)="optionsFn(item);">
          <ion-option value="item" *ngFor="let item of options">{{item.name}} &nbsp;&nbsp;{{item.price}}</ion-option> 
        </ion-select>
      </ion-item>

{{salespriceOp}}

{{quantityOp}}

this is my .ts file code

product_option_value_idOp
  priceOp
  salespriceOp
  quantityOp
  skuOp
  nameOp

  options =  [
          {
            "product_option_value_id": "45",
            "name": "Bangalore Auto",
            "quantity": "12",
            "sku": "56876",
            "price": "100.00",
            "salesprice": "50"
          },
          {
            "product_option_value_id": "51",
            "name": "Hyderabad Auto",
            "quantity": "23",
            "sku": "56543",
            "price": "200.00",
            "salesprice": "60"
          },
          {
            "product_option_value_id": "52",
            "name": "Delhi Auto",
            "quantity": "14",
            "sku": "98767",
            "price": "300.00",
            "salesprice": "80"
          }
        ];
  constructor(public navCtrl: NavController) {

  }

  optionsFn(item) {//here item is an object 
    console.log(item);
    this.product_option_value_idOp = item.product_option_value_id;
    this.priceOp = item.price;
    this.salespriceOp = item.salesprice;
    this.quantityOp = item.quantity;
    this.skuOp = item.sku;
    this.nameOp = item.name;
  }

i am able to invoke the function but i am getting undefined in console.log(item)

Upvotes: 20

Views: 69244

Answers (7)

Demsey.Roll
Demsey.Roll

Reputation: 1

In html

<ion-select  (ionChange)="optionsFn($event)">
<ion-option    *ngFor="let item of options" [value]="item.name"> 
  {{item.price}}</ion-option> 
 </ion-select>

In .ts

 optionsFn(event) {
 console.log(event);
}

Upvotes: 0

Kunal Chikte
Kunal Chikte

Reputation: 101

As per my experience insted of (ionChange)="optionsFn();" we can use the [(ngModel)]="selectVariable" which can be easily fetch later at the .ts file

Upvotes: 1

Azam Alvi
Azam Alvi

Reputation: 7055

You can do like this

<ion-select (ionChange)="itemId = $event.target.value">
  <ion-select-option *ngFor="let s of itemIds" value="{{s.id}}">{{s.name}}</ion-select-option>
</ion-select>

OR you can also do like this

<ion-select value="{{itemId}}" [(ngModel)]="itemId">
  <ion-select-option *ngFor="let s of itemIds" value="{{s.id}}">{{s.name}}</ion-select-option>
</ion-select>

And in you .ts file just declare variable itemId;

Upvotes: 1

Kroksys
Kroksys

Reputation: 981

  1. On ion-select element set #id and (ionChange)="anyFunc()"
<ion-select (ionChange)="anyFunc()" #anyName>
  <ion-option value="{{item.id}}" *ngFor="let item of apicall?.items"></ion-option>
</ion-select>
  1. Edit the ts file accordingly. Most importantly set ViewChild as a Select type from ionic-angular
import { Select } from 'ionic-angular';

@ViewChild('anyName') theSelectObject: Select;

contructor() { }

anyFunc() {
    const theValue = this.theSelectObject.value;
}

and Good luck!

Upvotes: 0

ragav
ragav

Reputation: 29

Use (ngModelChange) instead of (click) event.

(ngModelChange)="optionsFn()"

whenever the model value changed the ngModelChange will automatically call the relative function.

<ion-item>
  <ion-label>place</ion-label>
  <ion-select [(ngModel)]="place" (ngModelChange)="optionsFn(item)">
      <ion-option value="item" *ngFor="let item of options">{{item.name}} &nbsp;&nbsp;{{item.price}}</ion-option> 
  </ion-select>
</ion-item>

Upvotes: 1

sebaferreras
sebaferreras

Reputation: 44659

There were several things that together caused that error. The first change there is that instead of using the click event like this:

(click)="optionsFn(item);

You should use the ionChange event that Ionic exposes like this:

(ionChange)="optionsFn();"

Also notice that since you use the [(ngModel)]="place" to bind the select element to one of your component's properties, you don't need to send the item as a parameter, because this.place will be the selected item when the ionChange event is triggered.

That's why your optionsFn method would look like this:

public optionsFn(): void { //here item is an object 
    console.log(this.place);

    let item = this.place; // Just did this in order to avoid changing the next lines of code :P

    this.product_option_value_idOp = item.product_option_value_id;
    this.priceOp = item.price;
    this.salespriceOp = item.salesprice;
    this.quantityOp = item.quantity;
    this.skuOp = item.sku;
    this.nameOp = item.name;
  }

Upvotes: 30

ranakrunal9
ranakrunal9

Reputation: 13558

Check after making below changes :

// html change

<ion-select [(ngModel)]="gaming" (change)="optionsFn();">
  <ion-option [value]="item" *ngFor="let item of options">{{item.name}} &nbsp;&nbsp;{{item.price}}</ion-option> 
</ion-select>

//.ts change

optionsFn() {
  console.log(this.gaming);
  let item = this.gaming;
  this.product_option_value_idOp = item.product_option_value_id;
  this.priceOp = item.price;
  this.salespriceOp = item.salesprice;
  this.quantityOp = item.quantity;
  this.skuOp = item.sku;
  this.nameOp = item.name;
}

Upvotes: -1

Related Questions