【问题标题】:Angular and Reactive form arrays setting a form ontrol value inside form array giving error of must supply a value for form control nameAngular 和 Reactive 表单数组在表单数组中设置表单控件值,给出错误必须为表单控件名称提供值
【发布时间】:2019-05-11 03:42:08
【问题描述】:

我需要将反应式表单数组的特定表单控件设置为一个值。 我正在使用以下内容:

(<FormArray>this.formGroup.get('test')).at(i).setValue(oldFr);

其中i 是应该进行更改的索引,oldFr 是要设置的值。

但我忘记了每个索引中有多个表单控件。我需要设置的表单控件叫做formControlName="fr"

我试过了:

(this.formGroup.get('test')).at(i).controls['fr'].setValue(oldFr);

但我有以下错误:

错误错误:必须为表单控件提供一个值,名称为:'fr'

无法读取 null 的属性“at”

如何设置控件数组中的表单控件的值?

【问题讨论】:

标签: angular angular-reactive-forms angular7 formarray


【解决方案1】:

听起来您有一个 FormGroup,其键包含一个 FormArray,它本身包含一个 FormGroups 数组。

const formGroup = new FormGroup({
  test: new FormArray([
    new FormGroup({
      fr: new FormControl('')
    })
  ])
})

formGroup.get('test').at(0).get('fr').patchValue(oldFr)

【讨论】:

  • 我没有完全理解patchValuesetValue 之间的区别。你能解释更多吗?
  • 顺便说一下,setValuepatchValue 都使用了您的代码。
  • @alim1990 你是对的。这两种方法看起来是一样的。我曾认为patchValue 可以用于设置单个控件的值,而setValue 用于设置整个FormGroup 的值,但我似乎弄错了。我删除了那部分答案。
  • @alim1990 setValue :您需要设置所有字段。 PatchValue:只能设置一个字段。
  • 我将通过强调setValue需要设置所有字段和patchValue可以来扩充@YohannDanielCarter 的答案> 只设置一个字段(但也可以设置多个字段)。
猜你喜欢
  • 2018-12-05
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 2018-10-31
相关资源
最近更新 更多