动态表单组件markAsDirty()错误:ExpressionChangedAfterItHasBeenCheckedError

时间:2018-06-18 20:50:15

标签: javascript angular angular-reactive-forms

我有一个带动态表单组件的应用程序,就像这个stackblitz:

https://stackblitz.com/edit/angular-g3a7cm?file=src%2Fapp%2Fform.component.ts&devtoolsheight=50

form.component从服务器加载架构和一些数据。如果为特定字段加载了数据,则通过调用markAsDirty()将其标记为脏。如果加载了脏的自动保存数据,则可以立即显示正确的验证消息。

还有一个form-field.component,它有一个评估禁用条件的函数,并禁用/启用该字段。

我第一次禁用表单上的任何字段时都会收到错误。

如果我注释掉这些行中的任何一行,那么错误就会消失:

form.component.ts:50 形状field.component.ts:42

任何人都知道为什么会发生这种情况以及如何解决这个问题?

我看过其他类似的问题,但似乎没有一个与我的具体问题相同。

感谢您的光临。

编辑:

另外,如果我在setTimeout中初始调用evalDisabled(),它会修复它。 (form-field.component.ts:32)我认为反应形式的意义在于它们应该允许同步逻辑。我为什么要这样做?

0 个答案:

没有答案