在反应形式的 Select 选项中具有默认值

Having Default Value in Select Option In Reactive Forms

如何根据我之前已经 select 设置的默认值。就像如果我编辑了一些东西并且它有一个下拉菜单,我可以看到我之前提交的默认值,这样就不会混淆用户。例如,在我的代码中,如果我单击编辑按钮,它会将我重定向到页面并启动下面的 "patchValues()" 功能,并且它能够从供应商列表中 select。我想要的是,如果我单击编辑按钮,我可以在 select 选项

中看到一个默认值

TS

patchValues() {
    let suppliers = this.myForm.get('suppliers') as FormArray;
    this.material.suppliers.forEach(supplier => {
      suppliers.push(this.fb.group({
       supplier_id: supplier.name,
     }))
    })
  }

HTML

<tr *ngFor="let row of myForm.controls.suppliers.controls; let i = index" [formGroupName]="i">
            <td>
              <select formControlName="supplier_id" class="col-md-12" >
                <option *ngFor="let supplier of suppliers"  [value]="supplier.id">
                  {{supplier.name}}
                </option>
              </select>
            </td>
   </tr>

您可以使用 select 上的 (change) 事件跟踪一个变量 private selectedSupplierId。您可以将其绑定到 [(ngModel)]="selectedSupplierId" 以在激活编辑模式时设置它。

例如:

HTML:

<select [(ngModel)]="selectedSupplierId" (change)=onSuppChange($event.target.value) formControlName="supplier_id" class="col-md-12" >
    <option *ngFor="let supplier of suppliers"  [value]="supplier.id">
          {{supplier.name}}
     </option>
</select>

TS:

private selectedSupplierId: any; //specify type if you can

private onSuppChange(value): void {
    this.selectedSupplierId = value;
}

编辑:如果您想要一个占位符...

<select [(ngModel)]="selectedSupplierId" (change)=onSuppChange($event.target.value) formControlName="supplier_id" class="col-md-12" >
    <option value="-1">Placeholder text..</option>
    <option *ngFor="let supplier of suppliers"  [value]="supplier.id">
          {{supplier.name}}
     </option>
</select>

patchValues()中的foreach后设置supplier.id = -1

致谢名单 Baconbeastnz's answer

你可以尝试这样的事情

<form [formGroup]="test">
    <div class="col-sm-6 form-group">
        <label>Industry</label>
        <select class="form-control select" formControlName="Industry">
      <option [selected] = "true == true" [ngValue] = "0"> Please Select</option>
      <option *ngFor="let industry of industries"  [ngValue]="industry.id">{{industry.name}} </option>  
</select>
    </div>
</form>

Working Example

希望我没有正确理解你的问题。如果该字段没有预置值,您将有一个默认选项:

<option value="">Select supplier...</option>
<option *ngFor="let supplier of suppliers"  [ngValue]="supplier.id">
  {{supplier.name}}
</option>

并且在您的 patchValues 中,您似乎想要推送实际 ID 而不是名称:

this.material.suppliers.forEach(supplier => {
  suppliers.push(this.fb.group({
   supplier_id: supplier.id
 }))

现在,如果没有供应商 ID,如果供应商 ID 为空字符串,则会选择默认选项 "Select supplier..."。如果它不是空字符串,您需要相应地调整您的模板,例如,如果该值是 null,您需要这样做:

<option value="null">Select supplier...</option>