首页 > 解决方案 > 角度触摸/更改表单的状态

问题描述

touched: false dirty: false在我保存它的值并在适当的位置分配新的 ID 之后,我需要制作我的表单。

该形式具有多级结构,并具有近似的下一个结构:

FormGroup
-- FormControl
-- FormControl
-- FormArray
  -- FormGroup
...

由于表格形状不稳定,我递归地运行我的保存。

FormGroup从 FormArray 中保存一个后,我制作group.markAsUntouched({ onlySelf: !hasChildren })group.markAsPristine({ onlySelf: !hasChildren }).

但是,在那之后,我得到了“原始”“未更改”FormGroups 的“更改”“脏”FormArray。

我也尝试过.parent保持不变和保持不变,但这导致“已更改”“脏”FormGroup(父级)中的“未更改”“原始”FormArray。

我永远不知道我有多深,以及是否可以将父级标记为未触及和原始,因为我只保存那些“脏”和“已更改”的 FormGroup。此外,我还会在卡片关闭之前检查根 FormGroup 是否已更改和变脏,因此保持真实值至关重要。

在文档中,据说markAsUntouchedmarkAsPristine重新计算 AbstractControl 父级的相应值,但它没有发生。

标签: angulartypescriptangular-reactive-forms

解决方案


您可以在重置方法中指定当前值 https://angular.io/api/forms/FormGroup#reset


推荐阅读