除了用户交互之外,究竟是什么将 Angular2 响应式 FormControl 标记为脏?

What exactly marks an Angular2 reactive FormControl as dirty beside user interaction?

这个问题是为了更深入地了解 Angular 响应式表单。

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

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

问题是:在将所有组件设置为新值后,验证和启用最后的this.formGoup.marktAsPristine()一些字段仍然或再次

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

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

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

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

根据 angular 文档

A control is dirty if the user has changed the value in the UI.

FormControls 在没有来自用户的交互或代码以某种方式执行此操作的情况下不会更新自己。即通过 markAsDirty()

请记住,'dirty' 属性 和 invalid 属性 一样会冒泡。因此,如果您正在嵌套 FormGroupFormArray,您可能会在反映嵌套的顶层看到值。

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

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