You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中valueChanges值显示正常但提交时theoreticalStock字段为空无法保存

问题根源

你混用了Angular响应式表单的formControlName绑定和原生[value]属性绑定:响应式表单的控件值完全由TS层的FormControl实例管理,你直接修改输入框的value属性只会更新视图展示,不会同步到FormControl的存储值里,所以提交表单时取到的还是初始化时的空值。

修复方案

1. 调整TS逻辑,直接更新FormControl值

删除原来的selectedMedTheoreticalStock变量赋值逻辑,改为直接调用表单控件的setValue方法更新值,也可以优化为只监听药品字段的变更,减少不必要的触发:

initForm() {
  this.addDrugAuditForm = this.formBuilder.group({
    serviceUserId: this.serviceUserId,
    medication: ['', Validators.required],
    theoreticalStock: ['', Validators.required],
    actualStock: ['', Validators.required],
    error: new FormControl(),
    reportedDate: [ this.today, Validators.required]
  });

  // 只监听药品字段变更,不需要监听整个表单
  this.addDrugAuditForm.get('medication')?.valueChanges.subscribe(medId => {
    this.selectedMedicationToAudit = this.serviceUsersMedication.find(item => item.id === medId);
    if (this.selectedMedicationToAudit) {
      const stock = fetchStockForMedication(this.selectedMedicationToAudit, this.stockDictionary);
      // 直接更新表单控件的值,会自动同步到视图
      this.addDrugAuditForm.get('theoreticalStock')?.setValue(stock.quantity || 0);
    }
  });
}

2. 调整HTML模板,移除冗余的value绑定

删掉[value]属性,响应式表单会自动把FormControl的值同步到输入框:

<div class="col-md-4 mb-3">
  <label>Theoretical Stock*</label>
  <input id="theoreticalStock"
         type="text"
         formControlName="theoreticalStock"
         class="form-control"
         >
</div>

内容的提问来源于stack exchange,提问作者DZF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:45:03