ngModel不会在mat-select中显示对象的值

时间:2018-03-26 08:51:34

标签: angular angular5 angular2-forms angular4-forms

我有一个公司课,它有一个总部的地址栏。地址是一个接口,它有另一个对象country,这是另一个接口。 在我的数据库中,我存储了所有国家。我有一个编辑选定公司的观点,在那里我可以设置或更改总部的地址,我为这些国家创建了一个选择:

<mat-select [(ngModel)]="company.headquarter.country">
    <mat-option *ngFor="let country of companyService.countries" [value]="country">
        {{country.name}}
    </mat-option>
</mat-select>

此代码将所选国家/地区保存到总部的国家/地区字段,但如果我要编辑同一公司,则mat-select不会显示实际值。我该如何解决这个问题?

编辑:

如果我将ngModel更改为company.headquarter.country.id并将[value]更改为country.id,那么它可以正常工作,但要存储国家/地区的代码或名称,我必须编写方法,它将通过companyService.countries数组中的id找到该国家/地区,并将此国家/地区设置为company.headquarter.country&#39; s字段。所以这不是一个好的解决方案。

2 个答案:

答案 0 :(得分:2)

  

此代码将所选国家/地区保存到总部所在的国家/地区   字段,但如果我想编辑同一家公司,则mat-select不会   显示实际值。我该如何解决这个问题?

问题是当你选择比较两个对象时,它们的引用可能不同。使用compare function将您的对象与id等标记进行比较。

  

要自定义默认选项比较算法,   支持compareWith输入。 compareWith采用有两个函数   参数:option1和option2。如果给出compareWith,则为Angular   通过函数的返回值选择选项。

<强>模板:

 <mat-form-field>
              <mat-select [(value)]="contract.company"
                          panelClass="example-panel-dark-blue"
                          [compareWith]="helper.compareById">

                <mat-option *ngFor="let cust of customers"
                            [value]="cust"> {{cust.title}}
                </mat-option>
              </mat-select>
  </mat-form-field>

<强>代码:

 compareById(f1: Common.Item, f2: Common.Item): boolean {
     return f1 && f2 && f1.id === f2.id;
 }

Official Doc

答案 1 :(得分:0)

$duplicates更改为$duplicates = array(); $results = $data; foreach( $results as $k=>$v ) { if( isset( $duplicates[$v['Access ID']] ) ) { unset( $results[$k] ); } else $duplicates[$v['Access ID']] = TRUE; } print_r( $results );

[(ngModel)]