嗨,我在Angular中有一个表单,该表单是使用API的Observable中的值构建的。
.subscribe((res) => {
this.data = res['attributes'];
});
// this.data是对象数组!
this.attribs = modifyClean(this.data);
this.attribsOriginal = this.attribs;
Object.freeze(this.attribsOriginal);
使用this.attribs构建表单之后。如果用户编辑其原始表单值并单击“保存”,则api将其保存。 但是,如果API无法保存(500个错误或类似的错误),我希望表单返回其原始值。 我不是故意使用反应式表格。但是这是当api错误代码失败时我正在做的事情
,error {
this.attribs = this.attribsOriginal;
}
但这不是用原始值替换表单值。它保留了这些值。我在错误块中console.log这this.attribs和this.attribsOriginal。它们都是相同的值。这怎么可能。我冻结了attribsOriginal。 如果我说this.attribs = [];该窗体已完全删除按预期的方式。 但是为什么this.attribs = this.attribsOriginal不将表单值替换为原始值。 我认为冻结this.attribsOriginal不会对您造成任何影响。 如何避免这种情况?
答案 0 :(得分:0)
看起来像这样。attribs是对ModifyClean(this.data)返回的数据的引用,而this.attribsOriginal也是对相同数据的引用。如果您要克隆对象this looks helpful
Angular使用更改检测来决定何时使用您的“ this.attribs”数据来构建/重建dom的一部分。由于没有什么改变,所以没有建立/重建dom。
我认为您可以尝试任意更改component.ts文件中的数据,然后再将其更改回this might be helpful