【问题标题】:Ionic select ngModel whole object离子选择 ngModel 整个对象
【发布时间】:2019-03-08 17:05:59
【问题描述】:

我的代码是这样的:

<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 对象。

【问题讨论】:

    标签: angular ionic-framework angular-ngmodel ionic4


    【解决方案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

    【讨论】:

    • 但我从商店获得 current_language 所以 this.languages[0] 不正确,[selected]="i === 0"
    • 什么是商店? :)) 你的意思是从服务器异步获取它?
    • 好的,现在我知道了,您应该从商店获取当前语言并在您的语言数组中找到它,然后找到索引并将其分配给 current_language。
    • @O.Shekriladze 我现在更新了答案和演示检查。
    • 感谢@Fateme Fazli,[(ngModel)]="prog" (ionChange)="progChange(prog)"
    【解决方案2】:

    使用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 进行比较,您可以选择使用任何其他属性或属性组合。

    【讨论】:

    • 它说:不能绑定到 'compareWith',因为它不是 'ion-select' 的已知属性。
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2017-01-16
    相关资源
    最近更新 更多