如何获取未更新的响应式表单数据?

Posted

技术标签:

【中文标题】如何获取未更新的响应式表单数据?【英文标题】:How to get reactive form data that wasn't updated? 【发布时间】:2019-12-30 03:30:03 【问题描述】:

蓝光: 最终,我只是想让这一段代码发挥作用,但我无法获得具有更新值且没有空值的完整对象:

this.store.dispatch(new fromStore.UpdateObject(
  
    id: this.object$['id'],
    name: this.object$['name'],
    location: this.object$['location']
  
));

背景:

我有一个带有 namelocation 的简单响应式表单:

<input formControlName="location" type="text" value=" location "  />

我的构造函数是这样设置的:

  constructor(
    ...
    private formBuilder: FormBuilder
    )  
      this.myDataForm = this.formBuilder.group(
        'name':     ['', Validators.required ],
        'location': ['', Validators.required ]
      );
  

当我尝试获取我的数据时,如下所示:

console.log(this.myDataForm.value.location);

我只获取已更新字段的值。用户未更改的任何字段都返回空。

所以我的问题变成了:如何将一个完整的对象发送到服务器进行存储?我尝试了不同的循环来使用现有对象和更新的值来创建一个新的、完整的对象以发送到服务器,但是由于我的原始对象是可观察的,所以我不断收到不同的错误。

更新:看起来我可能需要将我的可观察数据正确连接到我的反应形式。我认为它与patchValue有关,但仍然无法弄清楚。这是我用来获取可观察数据的代码(匹配 ID 以从数组中过滤 1):

this.soldier$ = this.store.select(fromStore.getAllSoldiers).pipe(map(
  soldiers => soldiers.filter(s => s.id === params.get('id'))[0],
));

【问题讨论】:

不放 value=location,只放 '`。如果你想给一个初始值,你可以在创建表单时做,例如'name':['我的名字',Validatros.required] 啊,谢谢。我不认为这是答案,但它仍然有帮助。我正在关注几篇不同的文章来完成这项工作,但显然我仍然做错了一些事情! 我需要更多信息,但你试过console.log(this.myDataForm.getRawValue()) 看看你得到了什么? 是的。当我编辑“名称”时,我得到名称(用户输入)和位置 =“”。当我编辑位置时,我得到相反的结果。当我编辑两者时,我都得到了。无=无。在我按照其他人的建议删除 value=location 后,表单呈现时没有我的默认值,所以我目前正在尝试弄清楚如何取回它们 顺便说一句,@Eliseo 是对的。不要使用value 更新或初始化您的控件。 【参考方案1】:

使用 ngModel 代替 value=

<input formControlName="location" type="text" [(ngModel)]="myDataForm.value.location" />

ngModel 会随着 myDataForm 中的值的更新而反应性地更新表单值。

【讨论】:

它给了我一个折旧错误(并且没有连接我的数据):看起来您在与 formControlName 相同的表单字段上使用 ngModel。 Angular v6 中已弃用对使用 ngModel 输入属性和 ngModelChange 事件的响应式表单指令的支持,并将在 Angular v7 中删除。 你运行的是什么版本的 Angular? 8.2.1。我想我现在很接近了......只是试图将数据正确连接到表单。似乎我可能需要以某种方式从我的可观察到的形式修补值。现在正在努力... @kenef,不要同时使用 formControlName 和 [ngModel] 这是不正确的。 [ngModel] 关联一个模板驱动表单,formControlName 关联一个 Reactive Forms 从 Angular 7+ 开始,是的,否则没有 @Eliseo

以上是关于如何获取未更新的响应式表单数据?的主要内容,如果未能解决你的问题,请参考以下文章

获取响应式表单FormGroup里的formControl对象示例

如何从数据库中获取数据并在表单中显示以更新内容

如何从 Bootstrap 3 中获取响应式网格?

React Apollo - nodejs graphql后端返回异步响应后如何重新获取(更新)数据

如何从 mongodb 到 html 表单字段中获取数据?

如何防止数据库获取以前未更新的旧数据