javascript - Mat-select 沒有顯示已選擇的值
let selectedSpecs = this.editData.element.specifications;
this.spec = this.specForm.get('spec') as FormArray;
if (selectedSpecs.length != 0){
let selectedAttributeIds = [];
selectedSpecs.forEach((spec, i) => {
let attribute;
attribute = {'id': spec.itemDetailId, 'itemId':this.editData.element.itemId, 'name': spec.name};
this.spec.push(this.formBuilder.group({
attribute: attribute,
attributeSpec: spec.description
}));
selectedAttributeIds.push(spec.itemDetailId);
});
let attributes = [];
this.selectedCatAttributes.forEach((tempattribute) => {
let selected;
if (selectedAttributeIds.includes(tempattribute.id)) {
selected = true;
}else {
selected = false;
}
attributes.push(new Attribute(tempattribute, !selected));
});
this.attributeList.next(attributes);
}
<div formArrayName="spec" *ngFor="let spec of specForm.get('spec')['controls']; let i= index">
<div [formGroupName]="i">
<mat-card class="addShadow">
<button style="float: right" mat-icon-button (click)="removeSpec(i)"><mat-icon class="specClear">cancel</mat-icon></button>
<mat-form-field class="spec">
<mat-select placeholder="Select Attribute" formControlName="attribute" (selectionChange)="selectedOption($event.value,i)">
<mat-option *ngFor="let attribute of attributeList | async; let index = index" [value]="attribute.attribute" [disabled]="!attribute.allowed">
{{attribute.attribute.name}}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field class="spec">
<input matInput placeholder="Specification" formControlName="attributeSpec">
</mat-form-field>
</mat-card>
</div>
</div>
我如何在下拉選單中顯示初始值。我正在使用表單陣列。我已經嘗試過使用 [value] 和 [compareWith],但這些都對我無效。
答案#1
我嘗試了很多次,並找出了解決這個問題的方法。我使用了 [compareWith] 來解決這個問題。這是我的解決方案。
這是我在 [compareWith] 中呼叫的方法。
attributeDisplay(attribute1, attribute2) {
if (attribute1.id == attribute2.id) {
return attribute1.name;
} else {
return "";
}
}
這是我的 HTML。
<mat-form-field class="spec">
<mat-select
placeholder="Select Attribute"
formControlName="attribute"
(selectionChange)="selectedOption($event.value,i)"
[compareWith]="attributeDisplay"
>
<mat-option
*ngFor="let attribute of attributeList | async; let index = index"
[value]="attribute.attribute"
[disabled]="!attribute.allowed"
>
{{attribute.attribute.name}}
</mat-option>
</mat-select>
</mat-form-field>
