从 ionic-select-searchable 迁移到 ionic-selectable 会引发问题

Migrating from ionic-select-searchable to ionic-selectable throws an issue

我一直在测试 ionic-selectable 使用数组 select 并且 ionic-select-searchable 中的搜索选项已被弃用。但是,我遇到一个问题,当 selecting 使用新的 ionic-selectable 选项时,所有选项都是 selected 而不是单个项目,我不确定我在做什么错了。

这是我的 home.html 代码:

<ion-header>
    <ion-navbar>
        <ion-title>Ionic Selectable</ion-title>
    </ion-navbar>
</ion-header>
<ion-content>
  <ion-item>
    <ion-label>Diagnosis</ion-label>
    <ionic-selectable
      item-content
      [(ngModel)]="diagnosis"
      itemValueField="id"
      itemTextField="name"
      [items]="diagnoses"
      [canSearch]="true"
      (onChange)="diagnosisChange($event)">
    </ionic-selectable>
  </ion-item>
</ion-content>

我的home.ts:

import { Component } from '@angular/core';
import { IonicSelectableComponent } from 'ionic-selectable';
import { DiagnosisService } from '../../services';
import { Diagnosis } from '../../types';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  diagnoses: Diagnosis[];
  diagnosis: Diagnosis;

  constructor(
    private diagnosisService: DiagnosisService
  ) {
    this.diagnoses = this.diagnosisService.getDiagnoses();
  }

  diagnosisChange(event: {
    component: IonicSelectableComponent,
    value: any
  }) {
    console.log('diagnosis:', event.value);
  }
}

我的diagnosis.services.ts:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { delay } from 'rxjs/operators';
import { Diagnosis } from '../types';

@Injectable()
export class DiagnosisService {
  private diagnoses: Diagnosis[] = [
      {name: 'Hypothyroidism' },
      {name: 'Hyperthyroidism' },
      {name: 'Diabetes Type 1' },
      {name: 'Diabetes Type 2' }];

  getDiagnoses(page?: number, size?: number): Diagnosis[] {
    let diagnoses = [];

      this.diagnoses.forEach(diagnosis => {
        diagnoses.push(diagnosis);
      });

    if (page && size) {
      diagnoses = diagnoses.slice((page - 1) * size, ((page - 1) * size) + size);
    }

    return diagnoses;
  }
}

我基本上在这里创建了一个 stackblitz,你可以看到我遇到了什么错误: https://stackblitz.com/edit/ionic-selectable-on-search-upikeg

这是与较旧的 ionic-select-searchable 一起使用的插件: http://plnkr.co/edit/3xxNuMSIqvli8Djv8F1A?p=preview

知道我做错了什么吗?

问题是您告诉该组件使用 id 来识别每个选项:

<ionic-selectable
  item-content
  [(ngModel)]="diagnosis"
  itemValueField="id" <!-- Here! -->
  itemTextField="name"
  [items]="diagnoses"
  [canSearch]="true"
  (onChange)="diagnosisChange($event)">
</ionic-selectable>

但您的模型没有 id。所以我建议为每个实体添加一个 id 字段并将其用作 itemValueField,或者如果您不想添加 id,则可以使用 name (仅当每个项目都有不同的名称时)。

这是一个 working Stackblitz 例如,如果您修改组件以使用 name 属性 而不是 iditemValueField:

<ionic-selectable
  item-content
  [(ngModel)]="diagnosis"
  itemValueField="name" <!-- Here! -->
  itemTextField="name"
  [items]="diagnoses"
  [canSearch]="true"
  (onChange)="diagnosisChange($event)">
</ionic-selectable>