Ионный / Угловой — опция выбора не отмечена, параметры загружены из API

#angular #ionic-framework #select-options

#угловатый #ионный каркас #выберите-параметры

Вопрос:

Я создал select, параметры загружаются из API, проблема в том, что когда у меня есть какое-то значение, которое было установлено ранее, теперь я хочу отобразить это в этом выборе, я не вижу этого значения, отмеченный параметр виден после нажатия на select. Почему это так? Мой кодекс.

 <form [formGroup]="form">
  <ion-item class="transparent">
    <ion-select cancelText="Cancel" formControlName="type">
      <ion-select-option *ngFor="let type of types" [value]="type">{{type.name}}</ion-select-option>
    </ion-select>
  </ion-item>
</form>

ngOnInit() {
    this.form = this.fb.group({
        type: new FormControl('')
    })
    this.service.getTypes().then((types) => {
        this.types= types;
        this.form.controls['type'].setValue(this.types[0]);
    });
  }

export class Type{
  public id: number;
  public name: string;
}
 

Выберите не тронутый

Отмеченное значение

При нажатии кнопки выбрать отображается значение

Пожалуйста, посоветуйте, возможно ли отобразить эти данные.

Комментарии:

1. Попробуйте использовать ngModel: <ion-select cancelText="Cancel" formControlName="type" [(ngModel)]="type"

2. Это не помогло :/

3. Смогли ли вы решить эту проблему? 🙂

4. Да, я исправил это, я создал форму после загрузки всех данных с сервера.

Ответ №1:

в вашем ion-select-option значение поля должно иметь строку, а не объект или целое число, как вы пытаетесь, чтобы связать его и проанализировать идентификатор целочисленного значения в строку. вы можете сделать что-то вроде: ([value]=»‘type.id «»)

 <ion-select-option *ngFor="let type of types" [value]="'type.id'">{{type.name}}</ion-select-option>
 

Комментарии:

1. Это та же проблема, что и с объектом в качестве значения :/

Ответ №2:

Я использовал почти то же самое в этой демонстрации Stackblitz, и, похоже, все работает нормально, поэтому в вашем коде должно быть что-то не так, что не показано в вашем вопросе.

Не стесняйтесь использовать демо-версию Stackblitz, чтобы посмотреть, сможете ли вы воспроизвести проблему там.

Это код компонента:

 import { Component, OnInit } from "@angular/core";
import { FormBuilder, FormControl, FormGroup } from "@angular/forms";
import { Item } from "../../models/item.model";
import { ItemsService } from "../../services/items.service";

@Component({
  selector: "app-home",
  templateUrl: "./home.page.html",
  styleUrls: ["./home.page.scss"]
})
export class HomePage implements OnInit {
  public form: FormGroup;
  public items: Array<Item>;

  constructor(
    private formBuilder: FormBuilder,
    private itemsService: ItemsService
  ) {}

  ngOnInit() {
    this.form = this.formBuilder.group({
      item: new FormControl("")
    });

    this.itemsService.getItems().then(items => {
      this.items = items;

      // Select the second item by default
      this.form.controls["item"].setValue(this.items[1]);
    });
  }
}
 

И это код представления:

 <ion-header>
  <ion-toolbar>
    <ion-title>Home</ion-title>
  </ion-toolbar>
</ion-header>
<ion-content class="ion-padding">
  <form [formGroup]="form">
    <ion-list>
      <ion-item>
        <ion-label>Item</ion-label>
        <ion-select cancelText="Cancel" formControlName="item">
          <ion-select-option *ngFor="let item of items" [value]="item">
            {{ item.name }}
          </ion-select-option>
        </ion-select>
      </ion-item>
    </ion-list>
  </form>
</ion-content>