编辑:此问题的原因是由于“禁用”而不是“ patchValue”,因此我修改标题以解决该问题。
我有一个反应式表格,该表格必须根据另一个字段的值动态更新金额字段。通过使用patchValue
,Update部分可以正常工作,但是,一旦激发patchValue
,我将无法获得数量字段的值。
我的表格:
basicInfoForm: this.formBuilder.group({
lc_currency :'',
lc_amount :'',
}),
我的主要HTML
<nav>
<div class="nav nav-tabs" id="myTab" role="tablist">
<a class="nav-item nav-link active" id="nav-basic-tab" data-toggle="tab" href="#nav-basic" role="tab">
Internal Info
</a>
</div>
</nav>
<div class="tab-content" id="nav-tabContent">
<div class="tab-pane fade show active" id="nav-basic" role="tabpanel" aria-labelledby="nav-basic-tab">
<form [formGroup]="extraInfoForm">
<div class="row">
<div class="col-md-3">
<div class="form-group">
<label class="control-label required-field">change amount?</label>
<select class="form-control" formControlName="doModAmt"
(change)="onDoModAmtChanged($event)" required>
<option value="Y">Y</option>
<option value="N">N</option>
</select>
</div>
</div>
</div>
</form>
<app-amd-lc-ext-action-basic [basicInfoForm]="basicInfoForm"></app-amd-lc-ext-action-basic>
</div>
</div>
我的标签HTML:
<div style="width:90%;margin:auto">
<div class="form-horizontal" id="div_form">
<div [formGroup]="basicInfoForm">
<div class="row">
<div class="col-md-3">
<div class="form-group">
<label class="control-label required-field">New LC Currency</label>
<input type="text" class="form-control" readonly=true formControlName="lc_currency" required>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<label class="control-label required-field">New LC Amount</label>
<input type="text" class="form-control" formControlName="lc_amount" required>
</div>
</div>
</div>
</div>
</div>
</div>
主要HTML ts上的onDoModAmtChanged方法。
onDoModAmtChanged(event: any){
if(event.target.value == 'N'){
this.basicInfoForm.controls['lc_amount'].patchValue("100000");
this.basicInfoForm.controls['lc_amount'].disable();
}else{
this.basicInfoForm.controls['lc_amount'].enable();
}
}
在主要ts上执行'this.basicInfoForm.value
',如果未触发onDoModAmtChanged
(未触发patchValue
),则值为:{"lc_currency":"USD","lc_amount":"50000"}
,这是正确的。 / p>
但是一旦触发patchValue
,lc_amount
就丢失了,只剩下lc_currency
了:{“ lc_currency”:“ USD”}
有人可以帮忙吗?非常感谢。
答案 0 :(得分:0)
由于要禁用lc_amount
控件,因此在调用this.basicInfoForm.value
时将看不到其值,因为它不会显示禁用的控件的值。
因此,如果要检查所有表单控件值(包括禁用的值),请使用getRawValue方法:
this.basicInfoForm.getRawValue();