我使用的是角度反应式表单,并且有一个禁用的表单控件,它是根据其他字段/表单控件的值计算的。如何在禁用字段的相关字段值更改时更新该字段的值。计算正在工作,但我需要它订阅另一个字段的更改。创建窗体组的函数如下所示:

createBasket(basket: any) {
    return new FormGroup({
      length: new FormControl(basket.length),
      width: new FormControl(basket.width),
      height: new FormControl(basket.height),
      crossSectArea: new FormControl({value: basket.length * basket.width * basket.height, disabled: true}, Validators.required)
    });
  }

不确定这是否会改变解决方案,但我也在使用form array创建一个表单组实例数组。

最佳答案

FormControl API公开了一个valueChanges observable,您可以订阅它,然后使用setValue方法强制设置subscribe块中其他窗体控件的值:

ngOnInit() {
  this.basketForm = createBasket(basket);
  const length = this.basketForm.get('length');
  const width = this.basketForm.get('width');
  length.valueChanges.subscribe(val => {
    width.setValue(val * 2);
  });
}

工作示例:https://stackblitz.com/edit/interdependent-form-controls

10-06 15:57