【问题标题】:Set nested form group/control values in reactive forms在反应式表单中设置嵌套表单组/控件值
【发布时间】:2018-07-29 17:23:36
【问题描述】:

我的应用中有一个Reactive Form,结构如下:

this.bioForm = this._fb.group({
  firstName: [this.user.firstName, [Validators.required]],

  experience: this._fb.group({
    field0: ['', [Validators.required, Validators.maxLength(500)]],
    field1: ['', [Validators.required, Validators.maxLength(500)]],
    field2: ['', [Validators.required, Validators.maxLength(500)]],
    field3: ['', [Validators.required, Validators.maxLength(500)]],
    field4: ['', [Validators.maxLength(500)]],
    field5: ['', [Validators.maxLength(500)]]
  }),

  skills: this._fb.array([], Validators.required),
});

在我的浏览器local storage 我有以下内容:

我尝试过的:

 // Get Value from LOCAL STORAGE
 let localStorage_experience = JSON.parse(localStorage.getItem("experience")) || "";

 // Set nested form controls value
 this.bioForm.setValue({experience:{field0: localStorage_experience.field0 || ""}});

我正在尝试从本地存储中检索值并将它们设置为我的嵌套表单控件值。

【问题讨论】:

  • 请发布更多“面向上下文”的代码。这还不足以看出哪里出了问题
  • 投反对票的原因是什么?这是一个直截了当的问题。如何在角度组件中设置嵌套表单控件值。不知道怎么问这个。

标签: javascript angular typescript


【解决方案1】:

您可以使用 setControl 来替换现有的 formcontrol/formgroup/formarray:

this.bioForm.setControl('experience', this._fb.group(localStorage_experience));

StackBlitz

或者你可以使用patchValue

this.bioForm.patchValue({experience: localStorage_experience}); 

如果您想使用setValue,您需要将其应用于嵌套表单组,因为setValue 需要设置所有值。

this.bioForm.controls.experience.setValue(localStorage_experience);

【讨论】:

  • 更新了答案并提供了更多选项,如果您愿意,可以使用setValue。至少你必须选择:D
  • 这是完美的。谢谢你。我猜在使用 _fb.array() 时可以使用相同的方法?
  • 很高兴听到它对您有用 :) 至于 formarray...是的,但前提是它是原始类型。否则,您需要迭代数组并为数组中的对象创建表单组。
  • 嘿,伙计,在尝试为您重现问题时,我想通了。我是个白痴,没有更新前端。该数组包含代表前端复选框值的字符串。而且我没有更新从头到尾以实际显示值。非常感谢您的帮助! =D
  • 太棒了!我几乎要在我之前的评论中添加,当您尝试重现问题时,您可能会自己发现问题,瞧,它发生了! :D 很高兴为您提供帮助,您有美好的一天,编码愉快!
猜你喜欢
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 2019-02-01
相关资源
最近更新 更多