我在 angular 10 应用程序中遇到了问题,在初始化时将 formGroup 的状态传播到其父级。
问题:在组件初始化时,子表单的验证状态没有在多于一层的父级中正确传播。
更准确地说,我有 3 个嵌套组件。它们都是表单,并且两个 child 都实现了 ControlValueAccessor。它们通过“formControlName”属性进行通信。最深的表单初始化错误(必填字段)。
父级没有收到有效性状态(它保持有效)。
这是问题的再现:
https://stackblitz.com/edit/ngx-sub-form-hzo8wj?file=src/app/app.component.ts
我希望“基本表单组”在初始化时无效。 “级别 2”的有效性应在“级别 1”中传播,然后在“基本表单组”中的“级别 1”中传播。
它可能来自正常的 Angular 循环。
我在等待更好的解决方案时发现了一个黑客:
public ngAfterViewInit(): void {
this._injector.get(NgControl).control.updateValueAndValidity();
}
在第一个 Angular 循环之后,我们从子节点手动重新启动父节点的验证。这在所有子组件中级联。我怎么能避免使用这个黑客?
最佳答案
您的父表单是有效的,因为它不知道嵌套控件,因为 AbstractSubformComponent 的每个实例将创建它自己的 formGroup。
修复它的一种方法是将子控件动态添加到父表单组。
Here is your stackblitz with changes
关于嵌套 ControlValueAccessor 的 Angular 验证状态未在父级中正确传播,如何实现此验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66332284/