加载我的编辑表单后,我想用初始值填充Array数组。 我的下拉选择选项已被禁用,但未显示在垫选中。
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]都不适合我。
答案 0 :(得分:0)
我尝试了很多次,并找到了解决此问题的方法。我用[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>