根据其他表单控件更新Angular Reactive Form禁用字段的值

时间:2018-02-23 17:11:19

标签: angular typescript angular-reactive-forms angular-forms angular-validation

我在Angular中使用Reactive Forms并且具有禁用的Form Control,该控件是基于其他字段/表单控件的值计算的。如何更新该禁用字段的值,因为它的相关字段的值会更改。计算正在进行,但我需要它来订阅其他字段的更改。我创建FormGroup的函数如下所示:

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)
    });
  }

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

1 个答案:

答案 0 :(得分:3)

FormControl API公开了您可以订阅的valueChanges observable,然后使用setValue方法在订阅块中强制设置其他表单控件的值:

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