【问题标题】:Angular touched/changed status of a form角度触摸/更改表单的状态
【发布时间】:2020-02-09 01:32:23
【问题描述】:

在我保存表单的值并在适当的位置分配新的 ID 后,我需要将表单设置为 touched: false dirty: false

表单具有多级结构,并具有近似的下一个结构:

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

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

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

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

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

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

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

【问题讨论】:

    标签: angular typescript angular-reactive-forms


    【解决方案1】:

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

    【讨论】:

    • 我对表单重置只字未提。
    • 来自我给你的链接:“重置 FormGroup,将所有后代标记为原始和未触及,并将所有后代的值设置为 null。”但您可以指定值:this.form.reset(currentValueOfTheForm)
    【解决方案2】:

    通过调用reset方法重置表单。

    form.reset();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      相关资源
      最近更新 更多