Angular 2 动态表单更改产生异常"expression has changed"

Angular 2 Dynamic form change generates exception "expression has changed"

我正在尝试动态生成一个复杂的嵌套表单,但我无法让它工作。

结果将与此类似: Mock of desired result

用户必须 select 一个文件,它是什么类型的文件,描述并满足所需的元数据。 之后他就可以提交文件了。

问题是,当我动态生成表单时,我得到:"Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'."

我正在尝试对构建表单的部分强制进行更改检测,如下所示:

this.metadataForm = this.docMetService.toFormGroup(this.metadataDefinitions);
this.changesDetector.markForCheck();

但是还是报错。

有什么帮助吗? 提前谢谢你

让我猜猜。 您在某处访问控件的有效 属性,这最初是有效的,因为您可能没有加载会更改有效性的表单部分。

"Expression has changed after it was checked" 表示有东西在 angular 的眼睛之外。

要解决此问题,请尝试从您的模板中删除有效性检查,然后进行测试以查看一切是否正常。

然后,为了测试,将创建所有动态表单块的主要方法放在 setTimeout 中(这有助于 angular 重新 运行 cd)并在最后 运行一个cd.detectChanges.