我有一个公司课,它有一个总部的地址栏。地址是一个接口,它有另一个对象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字段。所以这不是一个好的解决方案。
答案 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;
}
答案 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)]