在反应形式的 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>
希望我没有正确理解你的问题。如果该字段没有预置值,您将有一个默认选项:
<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>
如何根据我之前已经 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>
希望我没有正确理解你的问题。如果该字段没有预置值,您将有一个默认选项:
<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>