【问题标题】:Form Control value becomes null OnSubmit when Disabled禁用时表单控件值变为空 OnSubmit
【发布时间】:2019-06-08 00:46:59
【问题描述】:

我有以下 Angular 7 表单:

ngOnInit() {

  this.organizationId = 1; // Used for testing

  this.form = this.formBuilder.group({     
    name: [''],
    organizationId: [{ value: this.organizationId, disabled: this.enableOrganizationChange }],
    start: ['']
  });

}

在 HTML 中,我将Select 用于OrganizationId。它按预期被禁用。

但是提交时的值是 null 而不是 1:

onSubmit() {

  if (this.form.valid) {

    this.submitting = true;

    console.log(this.form.value.organizationId);

    let request: Request = { 
      name: this.form.value.name,
      organizationId: this.form.value.organizationId.value,
      start: this.form.value.start
    };

  }

}

为什么记录的值是null 而不是1

我使用 disabled 只是为了避免用户更改值。

但我仍然需要提交时的值...

【问题讨论】:

标签: angular angular7 angular-reactive-forms


【解决方案1】:

正如您所注意到的,Angular 会忽略表单对象中禁用的表单控件。

这可以通过使用 getRawValue() 轻松解决,它包括所有表单控件,无论是否禁用。因此,例如在您提交时,您传递表单(不是表单值),如下所示:

(ngSubmit)="onSubmit(form)" 
Then you can use getRawValue:

onSubmit() {
  console.log(form.getRawValue())
}

请注意,所有这些都是使用 NgForms 而不是 ReactiveForms 发生的。 您可以通过添加 getRawValue() 来相应地更改 For ReactiveForms,例如:console.log(this.form.organizationId.getRawValue());

【讨论】:

  • 不确定我是否明白,但 console.log(this.form.organizationId.getRawValue()) 未定义。
  • 在我的 HTML 表单上,我有 <form [formGroup]="form" (ngSubmit)="onSubmit()">。这不是使用响应式表单的正确方法吗?我想继续使用响应式表单。
  • 好吧,如果你想坚持使用响应式表单,那么检查它是否给禁用的Select 选项提供了值:console.log(this.form.controls.organizationId.getRawValue()); 这是用于 FormGroup。
  • 如果它像这样工作,那么感谢您增加我的知识。
  • getRawValue() 是正确的方法。 this.form.controls['organizationId'].value this 更像是在破解它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2021-03-10
相关资源
最近更新 更多