0

这是一个深入了解 Angular Reactive Forms 的问题。

我们将在每个对话框中创建许多带有许多 FormControl 对象的复杂组件。对于这些 FormControl 对象,许多事情是在运行时动态设置的:

  • 模型数据(明显)
  • 验证规则(通过control.setValidators(valArray)
  • 启用/禁用(例如通过control.disable()

代码示例太大,无法在此处显示。

问题是:在将所有组件设置为新值、验证和启用以及最终this.formGoup.marktAsPristine()某些字段仍然或再次脏之后

一件事是,我们还有一些 Angular 典型的并发主题需要解决。因此,目前,很可能在那之后this.formGoup.marktAsPristine()一些并发活动仍在运行。但是对于我对 Angular 的理解:

如果到目前为止没有发生用户交互,哪些操作可以再次将 FormControl 设置为脏?

文档和我相当厚的 Angular 书无法向我解释。

4

2 回答 2

1

根据角度文档

如果用户更改了 UI 中的值,则控件是脏的。

FormControls不要在没有用户交互的情况下更新自己,或者代码以某种方式这样做。即通过markAsDirty()

请记住,“肮脏”的财产,如invalid财产会冒泡。因此,如果您正在嵌套FormGroupor FormArray,您可能会在顶层看到反映嵌套的值。

您提到并发这一事实让我质疑您是否在以{ emitEvent: false }编程方式设置控件的值时使用该选项。即使用时patchValue

同样确保onlySelf在适当的地方使用以减少发生的“冒泡”数量。

于 2020-11-02T18:45:25.007 回答
0

您是否通过 {onlySelf: false} 传递了选项?否则它只会将该抽象控件标记为原始控件。

于 2020-11-02T18:42:54.270 回答