Angular 角度反应形式禁用输入字段

Angular 角度反应形式禁用输入字段,angular,Angular,我有一个反应形式的组件 form = this.fb.group({ fullname: this.fb.group({ name: '', lastName: '', }), income: this.fb.group({ preTax: '', annualIncome: { value: '', disabled: true }, }), job: '', realName: false,

我有一个反应形式的组件

  form = this.fb.group({
    fullname: this.fb.group({
      name: '',
      lastName: '',
    }),
    income: this.fb.group({
      preTax: '',
      annualIncome: { value: '', disabled: true },
    }),
    job: '',
    realName: false,
  });
虽然annualIncome字段已禁用,但我已绑定到一个返回数字的方法

<input 
      formControlName="annualIncome" 
      [value]="calculateAnnualIncome(form.value.income.preTax)"
      type="text" 
      class="form-control">
虽然我在尝试检索时在字段中看到该值,但它返回“”

如何接收字段的实际值?

在.ts中

ngOnInit() {
    this.form.controls["income.annualIncome"].valueChanges.subscribe(value => {
       console.log(value);
    });
}

在Angular中,如果要获取包括禁用控件在内的所有值,应使用:

this.form.getRawValue();

或者以另一种方式使其只读,而不是禁用。通过这种方式,您可以按预期获得该控件的值。

如果您不想使用Observable收听值更改,您可以使用patchValue()方法设置禁用字段的值,如下所示

calculateAnnualIncome(preTax){
  let output = preTax * 14 * ((100 - 21) / 100);
  this.income.patchValue({annualIncome:output});
  console.log("Value from Input Filed",this.income.controls.annualIncome.value)

}
您可以使用

this.income.controls.annualIncome.value //output:13404.720000000001


我用另一种方式解决了您的问题,看看这个

您是否尝试订阅字段值?像这样.form.get('income.annualIncome').valueChanges.subscribe(val=>{consonle.log(“income”,val);});
calculateAnnualIncome(preTax){
  let output = preTax * 14 * ((100 - 21) / 100);
  this.income.patchValue({annualIncome:output});
  console.log("Value from Input Filed",this.income.controls.annualIncome.value)

}
this.income.controls.annualIncome.value //output:13404.720000000001
this.form.get('income.annualIncome').value