禁用后无法从活动表单获取价值

时间:2019-04-10 10:58:53

标签: angular angular-reactive-forms

编辑:此问题的原因是由于“禁用”而不是“ 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>

但是一旦触发patchValuelc_amount就丢失了,只剩下lc_currency了:{“ lc_currency”:“ USD”}

有人可以帮忙吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

由于要禁用lc_amount控件,因此在调用this.basicInfoForm.value时将看不到其值,因为它不会显示禁用的控件的值。

因此,如果要检查所有表单控件值(包括禁用的值),请使用getRawValue方法:

this.basicInfoForm.getRawValue();