Angular 不使用getRawValue获取唯一的FormGroup/控件值

Angular 不使用getRawValue获取唯一的FormGroup/控件值,angular,angular-reactive-forms,Angular,Angular Reactive Forms,我有一个主要组件,可以将当前表单内容的副本交还给用户。但我不知道如何从angular FormGroup中获取值,而不共享对调用它的组的值的引用。因此,如果通过.value检索副本并由其他组件修改,然后主组件被要求提供另一个副本,则它会将由其他组件修改的版本发回 从文档上看,它似乎应该始终是实际FormControls中当前值的副本。但事实并非如此,对调用.value的结果所做的更改将继续更新FormGroup的值。例如: var formValue = this.personForm.valu

我有一个主要组件,可以将当前表单内容的副本交还给用户。但我不知道如何从angular FormGroup中获取值,而不共享对调用它的组的
值的引用。因此,如果通过
.value
检索副本并由其他组件修改,然后主组件被要求提供另一个副本,则它会将由其他组件修改的版本发回

从文档上看,它似乎应该始终是实际FormControls中当前值的副本。但事实并非如此,对调用
.value
的结果所做的更改将继续更新FormGroup的值。例如:

var formValue = this.personForm.value;
formValue.name = 'Update assumed local copy'
给出看似奇异的all
true
结果:

formValue.name === 'Update assumed local copy'
this.personForm.value.name === 'Update assumed local copy' // What?
我遇到了
getRawValue()
,它确实按照我的预期工作,但它还包括我不想要的禁用控件。我只希望在
.value
中出现的值,但我希望返回一个唯一的实例,如
getRawValue()

我猜我可能不用使用JSON stringify/parse就能逃脱惩罚,但那感觉相当糟糕,我确信我只是错过了一些显而易见的东西


这是我抛出的一个例子,它显示了我所经历的许多奇怪之处。

如果你想更改值,请使用setValue,如果你想复制,可以使用spread操作符:
const-value={…form.value,phones:form.value.phones.map(x=>{…x})
const-value={…form.getRawValue(),phones:form.value.phones.map(x=>{…x})
@Eliseo我非常了解用于操作数据的AbstractControl方法。并且没有必要使用getRawValue()进行传播,因为它已经返回了一个副本(如stackblitz所示)。鉴于我们复杂的动态形式,手动传播是不可能的,递归地移动对象是我希望避免的事情。仍然不确定他们打算如何使用。值,当它的行为是这样的时候。