离子选择ngModel整个对象

时间:2019-03-08 17:06:00

标签: angular ionic-framework angular-ngmodel ionic4

我的代码如下:

<ion-select [(ngModel)]="current_language" okText="Okay" cancelText="Dismiss" (ionChange)="changeLanguage()">
    <ion-select-option *ngFor="let language of languages" [value]="language">{{language.name}}
    </ion-select-option>
  </ion-select>

当我选择其中一个并单击.ts文件current_language中的“确定”时,正是我所选择的。但问题是我认为绑定的另一种方式行不通。因为最初进入页面时未选择current_language

这是我的语言

Language{
id: number;
name: string;
flag: string;
code: string;
status: number;

}

那我该怎么做Language对象的双向绑定?因为我需要选择整个Language对象。

2 个答案:

答案 0 :(得分:1)

您应该将其设置为选择

<ion-item>
      <ion-label>Language</ion-label>
      <ion-select [(ngModel)]="current_language">
          <ion-option *ngFor="let language of languages; let i = index" [value]="language" [selected]="i === 0"> // selects first item
              {{language.name}} 
          </ion-option>
      </ion-select>
  </ion-item>

将ngModel用作数组的一项:

<ion-item>
      <ion-label>Language</ion-label>
      <ion-select [(ngModel)]="current_language">
          <ion-option *ngFor="let language of languages;" [value]="language">
              {{language.name}} 
          </ion-option>
      </ion-select>
  </ion-item>

在ts中:

current_language = this.languages[0]; // selects first item

更新: 如果您正在获取当前的语言表格存储:

ngOnInit(){
    let fromStore: Language =  {name: 'second' , id:1};
    let index: number = this.languages.findIndex(item => item.id === fromStore.id);
    this.current_language = this.languages[index];
  }

选中DEMO

答案 1 :(得分:0)

使用CompareWith选择默认值。还要注意使用[(value)]

在模板中,添加:

<ion-select [(ngModel)]="current_language" okText="Okay" cancelText="Dismiss" (ionChange)="changeLanguage()" [compareWith]="compareObjects">
    <ion-select-option *ngFor="let language of languages" [(value)]="language">{{language.name}}
    </ion-select-option>
  </ion-select>

在组件ts文件中,添加功能:

compareObjects(o1: any, o2: any): boolean {
return o1._id === o2._id;//Compare by id
}

此实现使用Id进行比较,您可以选择使用其他任何属性或属性组合。